读取复杂的JSON字符串

时间:2013-03-15 11:15:17

标签: json

我有一个像这样的复杂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}\",\

这还不完整。但如何阅读呢?

1 个答案:

答案 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,并且有许多不错的库可以读取。

请参见