使用动态密钥将JSON解析为HashMap

时间:2017-05-02 07:36:55

标签: java json hashmap

我试图在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

     

键:TXN_DATE,值:{Key:0,Value:0170501}等等

     

键:TXN_AMT,值:{键:0,值:10.00}等等

请提供一些建议。

1 个答案:

答案 0 :(得分: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);
        }

    }
}