【问题标题】:Java Parse Json Array in another Json Array json.simpleJava Parse Json Array in another Json Array json.simple
【发布时间】:2020-04-19 13:21:58
【问题描述】:

我正在使用 JSON.simple 库并尝试解析来自 HTTP GET 的 JSON 响应。它工作正常,但我很难解码以下结构

"example": [
    {
      "param1": 4.88,
      "param2": 60,
      "param3": [
        {
          "param3_1": 501,
          "param3_2": "Rain",
        }
      ],
    },

我使用以下代码成功提取了 param1 和 param2:

            JSONObject jo = (JSONObject) new JSONParser().parse(jsonString);
            JSONArray ja;
            Iterator<Map.Entry> itMap;
            Iterator itArray;

            ja = (JSONArray) jo.get("example");
            if (ja != null) {
                itArray = ja.iterator();
                while (itArray.hasNext()) {
                    ExampleClass e = new ExampleClass();
                    itMap = ((Map) itArray.next()).entrySet().iterator();
                    while (itMap.hasNext()) {
                        Map.Entry pair = itMap.next();
                        switch (pair.getKey().toString()) {
                            case "param1":
                                e.param1 = (double)pair.getValue();
                                break;
                            case "param2":
                                e.param2 = (long)pair.getValue();
                                break;
                            case "param3":
                                .....
                                break;
                            default:
                                break;
           }}}}

有谁知道如何设置迭代器来获取 param3 值?

【问题讨论】:

  • 为什么不写一个 POJO 然后使用 GSON 呢?
  • 有什么明显的区别或者我为什么要使用它而不是json.simple?
  • Pojo 让您的生活越来越轻松,代码更简洁、更简单。请用 gson 研究 pojo。
  • @Mitch 你的问题听起来像是我为什么要使用集合而不是实现我自己的 LinkedList 或 Hashmap。当然你可以实现 LinkedList 或 Hashmap,但我们使用集合 API 来简化我们的工作。 GSON 也是如此。

标签: java arrays json parsing json-simple


【解决方案1】:

如果您使用像 GSON 这样的库,这会容易得多。但是,如果您希望按原样继续,以下代码将提取 param3 中的内容。这不是推荐的方式,因为如果节点内的属性发生更改,代码将不得不更改。

因此,下次请尝试使用 JSON Parser

                        case "param3":
                        JSONArray jsonArray = ( JSONArray ) pair.getValue();
                        for( Object object : jsonArray )
                        {
                            JSONObject jsonObject = ( JSONObject ) object;
                            jsonObject.keySet().forEach( o ->
                            {
                                if( "param3_1".equalsIgnoreCase( o.toString() ) )
                                {
                                    // extract your value here
                                    long next = ( long ) jsonObject.get( o );
                                    System.out.println( next );
                                }
                                else if( "param3_2".equalsIgnoreCase( o.toString() ) )
                                {
                                    // extract your value here
                                    String next = String.valueOf( jsonObject.get( o ) );
                                    System.out.println( next );
                                }
                            } );
                        }
                        break;

如果您希望将 GSON 添加到此,请关注此 link。这是一个非常简单直接的教程

【讨论】:

    猜你喜欢
    • 2020-04-22
    • 2022-12-19
    • 1970-01-01
    • 2022-12-01
    • 1970-01-01
    • 2015-10-23
    • 2022-12-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多