【问题标题】:How to parse JSON block in java如何在java中解析JSON块
【发布时间】:2015-04-14 18:48:30
【问题描述】:

我有一些 JSON 信息。 示例:

"Items":[{"User":{"Id":"123","name":"abcdef","email":"xy@z.com"},"User":{"Id":"456","name":"def","email":"we@z.com"}}]

我想删除 '{'、'"' 和 '}' 等符号并将其存储在 ArrayList 中,以便 JSON 中的每个元素在新的 ArrayList 中具有单独的位置。 我期待的输出看起来有点像这样:

ArrayList[0][0]:Id
ArrayList[0][1]:123
ArrayList[1][0]:name
ArrayList[1][1]:abcdef
etc.,

示例代码:

public String[] ParseGetJSON (String str){
    String text = str;
    try{
        JSONParser jsonParser = new JSONParser();
        JSONObject jsonObj = (JSONObject) jsonParser.parse(text);
        JSONArray item = (JSONArray) jsonObj.get("Items");
        for(int i = 0;i<item.size();i++){
            System.out.println("The "+i+" element of the array"+item.get(i));
        }

输出:

The 0 element of the array: {"Id":"123","name":"abcdef","email":"xy@z.com"}

【问题讨论】:

  • 这不是ArrayList,而是JSON格式的String
  • 为什么不把它解析为 Json 而不是数组列表?
  • 我已经解析了 JSON 并将其存储到 ArrayList 中,因为我需要它以便在我的代码中进行进一步比较。
  • 请向我们展示mcve,以便我们查看原始输入以及您正在做什么来解析它以创建您的List
  • 我的错!我确实使用 JSONArray 和 JSONObject 来分离,但我没有使用 JSONParser。您能否给我一个示例代码,说明如何使用 JSONParser 来获得上述所需的输出。

标签: java arraylist


【解决方案1】:

您遇到的问题是原始输入 JSON 的嵌套比您解析的更深。调用item.get(i) 时看到的输出清楚地表明item 的每个元素也是一个JSONObject,每个元素都有三个字段(Idnameemail)。

您要做的是将每个元素视为JSONObject,并对其进行解析:

    for(int i = 0;i<item.size();i++) {
        // get the next element as a Object and print it
        System.out.println("The "+i+" element of the array: "+item.get(i));

        // get the next element as a JSONObject
        JSONObject obj = item.getJSONObject(i);
        Iterator<String> itr = obj.keys();
        // print all its keys/value pairs
        while (itr.hasNext()) {
            String key = itr.next();
            String value = obj.getString(key);
            System.out.println("key=" + key + ", value=" + value);
            // key=email, value=xy@z.com
            // key=name, value=abcdef
            // key=Id, value=123
            // ...
        }
    }

一旦你提取了每个键和值,你就可以对它们做任何你想做的事情。

【讨论】:

  • 嗨@azurefrog,通过使用上述方法,我可以获得key=User和value={"Id":"123","name":"abcdef","email": “xy@z.com”},但我需要获取 id 作为键和 123 作为值。你能告诉我如何再解析到一个级别吗?谢谢。
  • @Harsh123 你总是可以更深入地解析另一个层次。不用obj.getString(key)提取值,只需用obj.getJSONObject(key)提取嵌入的JSON,然后解析键和值。
  • @Harsh123 请记住,对于非常复杂/高度嵌套的对象,您最好使用现有的解析库(如 jackson 或 gson)而不是手动进行。
  • 谢谢@azurefrog ..这有效,我会记住这一点。
猜你喜欢
  • 2022-08-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-05
  • 1970-01-01
  • 2015-03-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多