【问题标题】:Parsing JSON To HashMap With Dynamic Keys使用动态键将 JSON 解析为 HashMap
【发布时间】:2017-05-02 07:36:54
【问题描述】:

我正在尝试将下面的 json 解析为 java 对象。我无法解析组合键和值。

"txn": {
    "TXN_TYPE": {
      "=": "SB"
    },
    "TXN_DATE(0)": {
      "=": "0170501"
    },
    "TXN_DATE(1)": {
      "=": "0170502"
    },
    "TXN_DATE(2)": {
      "=": "0170503"
    },
    "TXN_AMT(0)": {
      "=": "10.00"
    }
    "TXN_AMT(1)": {
      "=": "20.00"
    }
    "TXN_AMT(2)": {
      "=": "30.00"
    }
}

我正在使用 org.json.JSONObject 对其进行解析和迭代并将其存储在 HashMap 中。

JSONObject txn= jObject.getJSONObject("txn");
if (txn!= null) {
    Map<String,String> map = new HashMap<String,String>();
    Iterator iter = txn.keys();
    while(iter.hasNext()){
        String key = (String)iter.next();
        JSONObject valueObj = txn.getJSONObject(key);
        String value =  valueObj.getString("=");
        System.out.println("Response : Key : "+key+ " Value : "+value);
        map.put(key,value);
    }
}

我需要将其转换为如下格式的地图

键:TXN_TYPE,值:SB

key : TXN_DATE , value : {Key : 0, Value : 0170501} 等等

key : TXN_AMT , value : {Key : 0, Value : 10.00} 等等

请提供一些建议。

【问题讨论】:

  • 你试过什么?你被困在哪里了?
  • 什么是computes?向txn 询问它的密钥不是更好吗?
  • 我试图循环我在上面提供的代码的 json 对象。但我无法遍历动态键
  • value : {Key : 0, Value : 0170501} 是代表字符串还是嵌套映射?如果它是一个字符串,“等等”看起来如何?如果是地图,您希望如何将其存储在 Map&lt;String,String&gt; 中?
  • @shmosel。它应该是嵌套地图。所以我可以轻松地将 txn 日期和 txn amt 与键 [0,1,2...] 匹配。

标签: java json hashmap


【解决方案1】:

你可以试试这样的:

JSONObject txn = jObject.getJSONObject("txn");
if (txn != null) {
    Map<String, Object> map = new HashMap<String, Object>();
    Iterator iter = txn.keys();
    while (iter.hasNext()) {
        String key = (String) iter.next();
        JSONObject valueObj = txn.getJSONObject(key);
        String value = valueObj.getString("=");
        String[] keyParams = key.split("[\\(\\)]");

        if (keyParams.length > 1) { // it means it contains index

            // checking for old map
            Map<String, String> innerMap = (Map<String, String>) map.get(keyParams[0]);

            if (innerMap == null) {
                innerMap = new HashMap<String, String>();
            }
            innerMap.put(keyParams[1], value);
            map.put(keyParams[0], innerMap);
        } else {
            map.put(key, value);
        }

    }
}

【讨论】:

  • @萨钦。它的工作,它真的有帮助,非常感谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-02-14
  • 1970-01-01
  • 1970-01-01
  • 2020-07-28
  • 2018-12-25
  • 1970-01-01
相关资源
最近更新 更多