无法读取带有 json 对象的 jsonarray,NPE

Cant read jsonarray with json object, NPE

提问人:anchors 提问时间:12/25/2020 最后编辑:Reto Höheneranchors 更新时间:12/25/2020 访问量:86

问:

我是JSON格式和Java的新手。如果我遗漏了一点,请通知我。

这是我的解析器代码。path 为 true。如果我写了 blabla 部分,我可以阅读它。但是 examples.size 始终为 null。所以我无法读取文件的其余部分。 我使用json simple 1.1.1

   `JSONParser parser = new JSONParser();
        Object obj = parser.parse(path);
        JSONObject jsonObject = (JSONObject) obj;
        JSONArray examples= (JSONArray) jsonObject.get("example");
        System.out.println("Example SIZE:" + examples.size());`

我无法分享我的确切 json 文件,但这与我的 JSON 格式相似:

{
  "examples":{
    "blabla":"blabla",
    "example":[
      {
        "id":"1",
        "firstName":"Leonardo",
        "lastName":"DiCaprio",
        "photo":"http://1.bp.blogspot.com/-zvS_6Q1IzR8/T5l6qvnRmcI/AAAAAAAABcc/HXO7HDEJKo0/s200/Leonardo+Dicaprio7.jpg",
        "movieandpoint":[
          {
            "movie":"Inception",
            "point":"9.1"
          },
          {
            "movie":"Catch me if you can",
            "point":"8"
          }
        ],
        "decision":{
          "user":"admin",
          "#text":"ok"
        },
        "movieandpoint#1":[
          {
            "movie":"another one",
            "point":"7"
          }
        ]
      },
      {
        "id":"2",
        "firstName":"Johnny",
        "lastName":"Depp",
        "photo":"http://4.bp.blogspot.com/_xR71w9-qx9E/SrAz--pu0MI/AAAAAAAAC38/2ZP28rVEFKc/s200/johnny-depp-pirates.jpg",
        "movieandpoint":[
          {
            "movie":"Sweeny Tod",
            "point":"9"
          },
          {
            "movie":"Yoga Hosers",
            "point":"5"
          }
        ],
        "decision":{
          "user":"admin",
          "#text":"ok"
        },
        "movieandpoint#1":[
          {
            "movie":"another",
            "point":"9"
          }
        ]
      }
    ]
  }
}
Java JSON 解析 NullPointerException

评论

0赞 Reto Höhener 12/25/2020
请将您的测试 json 输入添加到您的问题中,并记下您正在使用的库。在您的示例代码中,键 () 中有一个拼写错误。exapmle
0赞 Reto Höhener 12/25/2020
并且 blabla 值之后似乎缺少一个逗号。

答:

0赞 A Paul 12/25/2020 #1

你必须从父母到孩子阅读。像下面这样的东西会起作用。首先,您必须读取 “examples” json对象,然后读取子 “exapmle”。顺便说一句,我无法使用您的 json 文件运行它,就像其他用户在评论中提到的那样,json 文件在结构上不正确。

JSONParser parser = new JSONParser();
    Object obj = parser.parse(aa);
    org.json.simple.JSONObject jsonObject = (org.json.simple.JSONObject) obj;
    org.json.simple.JSONObject object1 = (org.json.simple.JSONObject) jsonObject.get("examples");
   JSONArray examples = (JSONArray) object1.get("example");
    System.out.println("Example SIZE:" + examples.size());

评论

0赞 anchors 12/25/2020
是的,对不起,我修复了 json 文件。但无论如何,这对我不起作用
0赞 A Paul 12/25/2020
@anchors我按照最新的json进行了更新。现在尝试,您在新的 JSON 中将数组名称更改为“example”,代码需要根据该名称进行更新。还有parser.parse(aa),aa是包含json的字符串变量,请根据您的代码进行更新。它可以是字符串,也可以是从文件中读取的
0赞 anchors 12/25/2020
哦,我看到你调用了object1.get(“example”),我错过了.我也尝试将其称为jsonObject.get。非常感谢它奏效了!