当前位置: 首页 > 知识库问答 >
问题:

读取复杂JSON字符串

莫兴言
2023-03-14

我得到了一个复杂的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个答案

封瑞
2023-03-14

您的“JSON字符串”不是字符串。它是json数据(如json文件所示)。

这个json数据的所有值都是“Stringized json”。json数据的第二部分在grapspace下是双字符串化的。首先让我们了解您有什么,然后我们将它读成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."; 

因此,矩形保存一个json字符串,该字符串本身可以被解析为js对象。

GraphSpace还保存一个json字符串,但是当这个json字符串被解析为js对象时,它将保存一个由rectangle对象组成的数组(其中有一个rectangle对象),而这个rectangle对象在被解析后保存一个json字符串。

我再说一遍。在解析GraphSpacejson之后,这个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,并且有许多很好的库可以这样做。

    null
 类似资料:
  • 我想把一些JSON解析成一个SQL的INSERT,但是,由于不同级别的数据片段不同,很难得到所有的数据。 以下是JSON文件: 到目前为止,这就是我所用的Python,它可以工作: 结果是: 这有点对,但我需要插入看起来像: 我看到了一些例子:例1 但我一直没能让它为我工作。 @斯科尔05 我想你的意思是:但它导致了一个错误:AttributeError:'dict'对象没有属性'iteritem

  • 我有一个非常复杂的字符串,如下所示, 这里所有的JSON数据都在括号“[]”中,括号之间用“{…}”分隔支撑。在这里,我想要一个从所有花括号的消息,故事和属性。尝试了两件事一是二把所有的东西都放在一个JSON对象中,也尝试了一次无用的尝试来匹配regex“message:”但即使这样也没用。 从所有大括号中查找消息、故事和属性的方法是什么。

  • 问题内容: 我正在将jQuery AJAX POST发布到Servlet,并且数据采用JSON字符串的形式。它已成功发布,但在Servlet端,我需要将这些键- 值对读入Session Object并将其存储。我尝试使用JSONObject类,但无法获取它。 这是代码段 在Servlet方面 问题答案: 您实际上并没有解析json。

  • 问题内容: 我有一个有效的Json格式的字符串,它看起来像这样: 我想读取不同的字段,例如所有fa_titles,我使用$ obj = json_decode($ str,true); 将此转换为Json,然后回显sizeof($ obj [‘result’]); 告诉我它有5个结果对象,但是现在如何访问fa_title或en_title字段? 问题答案: 在JSON中,数组由方括号(和)指定,而

  • 我正在以JSON字符串的形式从数据库中获取数据: 如何从给定的JSON字符串中提取公司名称?