我有一个像这样的复杂JSON字符串。
"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}\",\
这还不完整。但如何阅读呢?
答案 0 :(得分:0)
您的“ json字符串”不是字符串。它是json数据(如json文件中所示)。
此json数据的所有值均为“ stringized json”。在graphSpace
下的json数据的第二部分被双重字符串化。首先让我们了解您所拥有的,然后再将其读入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对象。
graphSpace
还包含一个json字符串,
但是当解析为js对象时,此json字符串将包含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字符串。因此,您将编写:(例如,使用Google 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,并且有许多不错的库可以读取。
请参见