Parsing JSON To HashMap With Dynamic Keys

二次信任 提交于 2019-12-24 10:48:37

问题


I am attempting to parse below json to java object. I cannnot able to parse to combined keys and values.

"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"
    }
}

i am using org.json.JSONObject to parse and iterate over it and store it in 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);
    }
}

I need to convert this as map like below format

key : TXN_TYPE , value : SB

key : TXN_DATE , value : {Key : 0, Value : 0170501} and so on

key : TXN_AMT , value : {Key : 0, Value : 10.00} and so on

Please provide some suggestion.


回答1:


You can try something like this:

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);
        }

    }
}


来源:https://stackoverflow.com/questions/43732552/parsing-json-to-hashmap-with-dynamic-keys

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!