您的“json 字符串”不是字符串。它是 json 数据(如 json 文件中所示)。
此 json 数据的所有值都是“字符串化 json”。json 数据的第二部分,undergraphSpace
是双字符串化的。首先让我们了解您拥有什么,然后我们会将其读入 Java。
格式化后,我们拥有的内容更加清晰:
"rectangle":
"{\n
\"minX\": 0.0,\n
\"minY\": 0.0,\n
\"maxX\": 2460.0,\n
\"maxY\": 3008.0\n}",
"graphSpace":
"[[{
\"rectangle\":
\"{\\n
\\\"minX\\\": 0.0,\\n
\\\"minY\\\": 0.0,\\n
\\\"maxX\\\": 0.0,\\n
\\\"maxY\\\": 0.0\\n}\",
\
最后一个逗号和反斜杠是您未显示的一些连续 JSON 的一部分。graphSpace 的 json 字符串值在您的示例中不完整,并且没有右双引号。(最后一行代码中的 \" 只是字符串的一部分,并用反斜杠“转义”。
\
\ 是在字符串中写入单个反斜杠的方法。"
\" 是在字符串中写入双引号的方法。
string s1 = "the following double quote \" is not the end of the string.";
string s2 = "while the double quote after the next period does close the string.";
所以rectangle
保存了一个json字符串,它本身可以解析成一个js对象。
也包含一个 json 字符串,但是这个 json 字符串在解析为 js 对象时将graphSpace
包含一个对象数组rectangle
(其中包含一个矩形对象),并且这个矩形对象 AFTER PARSED 包含一个 json 字符串。
我再说一遍。解析完graphSpace
json 后,该rectangle
对象将保存一个 json 字符串,没有多余的双引号,因此您将拥有一个带有以下内容的 javascript 对象
myobj.graphSpace =
[[{
rectangle:
"{\n
\"minX\": 0.0,\n
\"minY\": 0.0,\n
\"maxX\": 0.0,\n
\"maxY\": 0.0\n}\"
// and I presume the rest of the missing code
}", // etc. etc.
在您的代码中的某个地方,也可能会解析 json 字符串。所以你会写:(例如使用谷歌GSon)
Gson gson = new Gson();
JsonReader reader = new JsonReader(new FileReader(filename));
Rectangle rect1 = gson.fromJson(reader, RECTANGLE_TYPE); // see link below for further details
GraphSpace graphSpace = gson.fromJson(reader, GRAPHSPACE_TYPE);
// at this stage you have parsed in all the json file.
// but you may wish to continue and parse the stringified value of the graphSpace.rectangle so:
string rectString = graphSpace[0][0].rectangle;
Rectangle graphRect = gson.fromJson(rectString, RECTANGLE_TYPE);
// or use a `for` loop to loop through the rectangle strings in graphSpace...
在 Java 中,有一种读取 JSON 的内置方法,并且有许多很好的库可以这样做。
看