2017-06-07 7 views
0

Ich habe eine JSON-Array, die ich in eine Karte einfügen.Karte ist eine geschweifte Klammern weglassen

for(int i = 0; i < jsonarr.length(); i++){ 

       try { 
        JSONObject jsonobj = jsonarr.getJSONObject(i); 

        Iterator<Object> keysItr = jsonobj.keys(); 
        while(keysItr.hasNext()) { 
         Object key = keysItr.next(); 
         Object value = jsonobj.get((String) key); 

         map.put((String) key, value); 

        } 
       System.out.println(map); 

Aber wenn ich die Karte anzeigen, gibt es mir eine Zeichenfolge, in der eine geschweifte geschweifte Klammer fehlt.

Ausgabe

{ 
    subtype=text, 
    maxlength=22, 
    values=[ 
    { 
     "label":"Time", 
     "value":"two", 
     "selected":true 
    },{ 
     "label":"Milk", 
     "value":"hot" 
    },{ 
     "label":"sky", 
     "value":"blue" 
    } 
    ], 
    (HERE) 
    name=text-1496816623336, 
    description=sa, 
    className=form-control, 
    label=Text Field, 
    type=text, 
    required=true 
} 

Ich habe verwendet jackson und Gson auch, aber in diesem Fall waren sie setzen nicht einmal die ganze json in map.It könnte eine dumme Frage, aber dank sein.

EDIT:

Hier wird die JSON verwendet, um die Map

[ 
    { 
    "type":"select", 
    "label":"Select", 
    "className":"form-control‌​", 
    "name":"select-149‌​6823185891", 
    "values"‌​:[ 
     { 
     "label":"Option 1", 
     "value":"option-1", 
     "selected":true 
     },{ 
     "label":"Option 2", 
     "value":"option-2" 
     },{ 
     "label":"Option 3", 
     "value":"option-3" 
     } 
    ] 
    },{ 
    "type":"text", 
    "label":"Text Field", 
    "className":"form-control", 
    "name":"text-1496823186970‌​", 
    "subtype":"text" 
    } 
] 
+2

Aufruf von 'toString()' auf einer regulären 'java.util.HashMap' druckt * nicht * gültige JSON. Sie müssen es ordnungsgemäß als JSON rendern, indem Sie die JSON-Bibliothek verwenden, die Sie verwenden, und nicht einfach "toString()" auf der Karte aufrufen. – Jesper

+0

Könnten Sie den JSON posten, mit dem die Karte gefüllt wurde? Sie werden übereinstimmen, nicht in der Syntax, sondern im Inhalt. PS: Hinzufügen eines neuen Zeilenumbaus in der Zeichenfolge würde Ihnen eine bessere Sicht auf das Format geben, nichts ist falsch damit – AxelH

+0

@Jesper Ich habe Jackson verwendet, aber es gab mir die Hälfte nicht die komplette JSON. Eigentlich möchte ich diese Karte zur Indexierung elastisch machen. –

Antwort

0

Wenn was ich ding ist, dass Sie immer noch zwei JsonObject in der Map erwarten. Das Problem ist, dass Sie die JsonArray iterieren, um jeden Schlüssel/Wert in den gleichen Map zu setzen, dh Sie überschreiben den vorherigen Wert mit dem letzten.

--first item : 
map.put("type","select"); 
--seconds item: 
map.put("type","text"); 

-- result 
map.get("type"); //"text" 

A Map ist flach, nicht zwei Werte für zwei Tasten haben, können Sie eine Sammlung von Map schaffen könnte auf jedem JsonObject jeden Wert wie ein List<Map>, zu speichern, zu wiederholen, erstellen Sie eine neue Map, dass Sie speichern in der Liste

+0

Hey, ich denke, das löst mein Problem..aber kannst du mir bitte ein Beispiel geben, wie man eine Sammlung von Karten erstellt, weil Json wird mir unbekannt sein. –

+0

@SarthakNegi Das hat nichts mit dem json zu tun, Sie müssen nur eine Instanz von 'Map' für jede Iteration von' jsonarr' erstellen und diese Instanz zu einer 'List ' hinzufügen. Diese "Liste" enthält alle "Karten". Nicht der beste Ansatz, aber das wird es tun. Wenn Sie das nicht verstehen, schlage ich vor, dass Sie einen Schritt zurück machen, weil Sie das Problem nicht bekommen. – AxelH

+0

Danke für die Antwort. Bin dankbar. –

1

Hey Nope zu erstellen gibt es keine geschweifte Klammer fehlt, .... Format der Ausgabe und Sie werden sehen:

{ 
    subtype=text, maxlength=22, values=[ 
     {"label":"Time","value":"two","selected":true}, 
     {"label":"Milk","value":"hot"}, 
     {"label":"sky","value":"blue"} 
    ],(HERE) 
    name=text-1496816623336, 
    description=sa, 
    className=form-control, 
    label=Text Field, 
    type=text, 
    required=true 
} 

Edit (Antwort auf Ihren Kommentar): Dies ist ein gültiger JSON-String:

[{"type":"select","label":"select","className":"form-control‌​","name":"select-149‌​6823185891","values":[{"label":"Option 1","value":"option-1","selected":true},{"label":"Option 2","value":"option-2"},{"label":"Option 3","value":"option-3"}]},{"type":"text","label":"Text Field","className":"form-control","name":"text-1496823186970‌​","subtype":"text"}].

Formated:

[ 
    { 
     "type": "select", 
     "label": "select", 
     "className": "form-control‌​", 
     "name": "select-149‌​6823185891", 
     "values": [ 
      { 
       "label": "Option 1", 
       "value": "option-1", 
       "selected": true 
      }, 
      { 
       "label": "Option 2", 
       "value": "option-2" 
      }, 
      { 
       "label": "Option 3", 
       "value": "option-3" 
      } 
     ] 
    }, 
    { 
     "type": "text", 
     "label": "Text Field", 
     "className": "form-control", 
     "name": "text-1496823186970‌​", 
     "subtype": "text" 
    } 
] 

In Ihrem einem gibt es einige versteckte Zeichen zwischen "values" und der :.

+0

danke für die Antwort..aber sehen Sie die JSON, die ich bekomme [{"type": "select", "label": "Select", "className": "form-control", "name": "select-1496823185891", "werte": [{"label": "Option 1", "value": "option-1", "selected": true}, {"label": "Option 2 "," Wert ":" Option-2 "}, {" Label ":" Option 3 "," Wert ":" Option-3 "}]}, {" Typ ":" Text "," Label ":" Textfeld "," className ":" form-control "," name ":" text-1496823186970 "," untertyp ":" text "}] ..Das ist der json, den ich in eine map umwandeln möchte –

+0

@SarthakNegi der, den du gepostet hast, passiert nicht den Online-JSON-Parser auf http://json.parser.online.fr/ – kism3t

Verwandte Themen