Max*_*lov 6 java string json multilinestring java-text-blocks
我需要将 JSON 数据作为字符串保存在代码中以进行单元测试。例如,
{
"one": 1,
"two": 2
}
Run Code Online (Sandbox Code Playgroud)
我知道我可以从文件或属性中读取这些数据,但我需要将它们保留为字符串。目前,我有这样的事情:
String s = "{\n" +
" \"one\": 1,\n" +
" \"two\": 2\n" +
"}";
Run Code Online (Sandbox Code Playgroud)
但它看起来很难看,而且在更复杂的数据中,很难读取和修改它。
我可能会摆脱它们\n
,因为它们并不是真正需要的,而是为了稍后更好地查看这些数据:
String s = "{" +
" \"one\": 1," +
" \"two\": 2" +
"}";
Run Code Online (Sandbox Code Playgroud)
另外,我可以使用引号替换的技巧:
String s = ("{\n" +
" 'one': 1,\n" +
" 'two': 2\n" +
"}").replace('\'','"');
Run Code Online (Sandbox Code Playgroud)
或者同时将两者结合起来。
有没有更好的方法在 Java 中将 JSON 数据表示为 a String
?
例如,在Python中,有三引号:
s = """
{
"one": 1,
"two": 2
}
"""
Run Code Online (Sandbox Code Playgroud)
如果您使用 Java 15 或更高版本来表示 JSON 数据而不是字符串连接(由于需要转义每个引号,字符串连接既繁琐又容易出错),您可以使用文本块。
要创建文本块,您需要将多行文本括在三个双引号字符中"""
。
String myJSON = """ // no characters should appear after the opening delimiter - the text starts from the next line
{
"one": 1,
"two": 2
}""";
Run Code Online (Sandbox Code Playgroud)
与常规字符串一样,文本块也支持转义序列,但您不需要转义文本块内的引号。
请注意,开始定界符后"""
应紧跟行终止符,如上例所示。
如果您的项目使用的 Java 版本不支持文本块,但您不想使用字符串连接进行拨号,则可以将 JSON 放入文本文件中,然后逐行读取它。
使用 Java 11,您可以使用以下命令将整个文件内容读取到一个字符串中Files.readString()
:
String myJSON = Files.readString(path);
Run Code Online (Sandbox Code Playgroud)