2017-05-02 2 views
0

Ich versuche, unter JSON zu Java-Objekt zu analysieren. Ich kann die kombinierten Schlüssel und Werte nicht analysieren.Parsing JSON HashMap mit dynamischen Keys

"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 org.json.JSONObject bin mit über sie zu analysieren und wiederholen und speichern sie 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); 
    } 
} 

Ich brauche dies wie

unten Format als Karte konvertieren

Schlüssel: TXN_TYPE, Wert: SB

Schlüssel: TXN_DATE, Wert: {Key: 0, Wert: 0.170.501} und so auf

Schlüssel: TXN_AMT, Wert: {Key: 0, Wert: 10,00} und so weiter

Bitte geben Sie einen Vorschlag.

+1

Was haben Sie versucht? Wo steckst du fest? – shmosel

+0

Was ist 'computes'? Wäre es nicht besser, 'txn' nach seinen Schlüsseln zu fragen? – Andreas

+0

Ich habe versucht, Json-Objekt zu loopen, ich habe meinen Code oben zur Verfügung gestellt. aber ich bin nicht in der Lage, dynamische Schlüssel zu durchlaufen – DEADEND

Antwort

2

Sie können so etwas wie dies versuchen:

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

    } 
} 
+0

Jetzt versuchen, ich habe den Code ein wenig geändert. –

+0

@ Sachin. Es funktioniert, es hat wirklich geholfen und vielen Dank. – DEADEND