【问题标题】:Using Java to parse json and print key and vaules使用 Java 解析 json 并打印键和值
【发布时间】:2020-06-26 19:44:40
【问题描述】:

我有以下 json,需要一些帮助来阅读 json 和键值对。使用 Java 我怎样才能读出来?

我正在尝试使用“org.json.simple.parser.JSONParser”,但无法读出键和值。

这是我阅读这些项目的尝试:

JSONParser parser = new JSONParser();

    try {
        Object obj = parser.parse(ds.getDoceboCourseData());
        
        JSONObject jsonObject = (JSONObject) obj;
        
        JSONArray items = (JSONArray) jsonObject.get("items");
        
        Iterator<JSONObject> iterator = items.iterator();
        while (iterator.hasNext()) {
            System.out.println(iterator.next());
        }
    } catch (Exception e) {
        e.printStackTrace();
    }

JSON:

{
   "data":{
      "items":[
         {
            "user_id":"111",
            "username":"111",
            "email":"blah@blah.com",
            "first_name":"blah",
            "last_name":"blah",
            "level":"Learner",
            "enrollment_date":"2020-06-26 00:43:49",
            "active_from":null,
            "active_until":null,
            "status":"Completed",
            "status_id":"2",
            "level_id":"3",
            "user_status_id":"1",
            "user_status":"Active",
            "score_given":"0.00",
            "forced_score_given":false,
            "date_complete":"2020-06-26 01:04:01"
         }
      ],
      "count":10,
      "has_more_data":true,
      "current_page":1,
      "current_page_size":10,
      "total_page_count":3,
      "total_count":23
   },
   "version":"1.0.0",
   "_links":[

   ]
}

【问题讨论】:

  • 你有一个外部对象。所以第一个键是'data':'data'->'items'。为什么不使用更高级的 JSON(反)序列化库,例如 Jackson 或 GS​​ON?
  • 请澄清“无法读出键和值”。您是否没有看到 任何 结果,或者您看到了异常堆栈跟踪或编译错误等意外情况?
  • 抱歉...出现空值错误:JSONArray items = (JSONArray) jsonObject.get("items");
  • 在 JSON 中,{} 代表一个对象,[] 代表一个数组。当您解析 {foo: {bar: "abc"} } 之类的内容时,您将获得带有键 foo 的对象。 foo 键有自己的对象,键为 bar,值为 "abc"。因此,当您想投注"abc" 时,首先获取foo 键下的值,然后从返回的对象读取bar 键的值。目前你正在做的是要求bar,但大多数外部对象没有那个键,所以它返回null。
  • 您还可以考虑将您的 JSON 视为目录树。使用帽子类比,您的代码就像尝试读取/items 而不是/data/items。换句话说,首先是get("data"),然后是结果get("items")

标签: java arrays json jsonparser


【解决方案1】:

感谢@Pshemo 的帮助:

public void parsedJSON(String json) {

    JSONObject obj = new JSONObject(json).getJSONObject("data");

    System.out.printf("Object : " + obj);

    JSONArray arr = obj.getJSONArray("items");
    for (int i = 0; i < arr.length(); i++) {
        String status = arr.getJSONObject(i).getString("status");
        String empId = arr.getJSONObject(i).getString("username");
        System.out.printf("Id : %s  Status : %s %n",  empId, status);
    }

【讨论】:

    猜你喜欢
    • 2021-10-15
    • 1970-01-01
    • 2018-09-11
    • 2016-10-25
    • 2016-01-18
    • 2017-06-20
    • 2020-07-27
    • 1970-01-01
    • 2019-09-15
    相关资源
    最近更新 更多