2017-06-07 64 views
0

我有一個json數組,我將它放在地圖中。地圖是省略一個大括號

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

但是,當我顯示地圖,它給了我一個字符串,其中有一個大括號丟失。

輸出

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

我用傑克遜和GSON還,但在這種情況下,他們甚至沒有把整個JSON到map.It可能是一個愚蠢的問題,但感謝。

編輯:

這裏是JSON用於創建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

在一個普通的java.util.HashMap中調用'toString()'不會*打印有效的JSON。您需要通過使用您使用的任何JSON庫將它正確地呈現爲JSON,而不是通過簡單地在地圖上調用'toString()'。 – Jesper

+0

你可以發佈用於填充地圖的JSON嗎?他們會匹配,而不是語法,但內容。 PS:在字符串中添加一些換行符會給你一個更好的格式視圖,沒有什麼是錯誤的 – AxelH

+0

@Jesper我已經使用傑克遜,但它給了我一半不完整的json。其實我想通過這張地圖彈性索引。 –

回答

0

如果我希望在Map中仍然有兩個JsonObject。問題在於您重複JsonArray以將每個鍵/值都放在相同的Map中,這意味着您將覆蓋上一個值。

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

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

一個Map是平的,你不能有兩個值,兩個鍵,您可以創建的Map一個集合來存儲像List<Map>每個值,每個JsonObject迭代,創建一個新的Map那你存儲在列表中

+0

上的在線json解析器嘿,我認爲這解決了我的問題..但是,請你給我一個關於如何創建地圖集合的例子,因爲json對我來說是未知的。 –

+0

@SarthakNegi這對json沒有任何關係,你只需要在'jsonarr'的每次迭代中創建'Map'的實例,並將該實例添加到'List '。那個'List'將保存每個'Map'。不是最好的方法,但是這會做到。如果你不明白,我建議你退後一步,因爲你沒有解決問題。 – AxelH

+0

感謝您的回覆。欣賞它。 –

1

嘿沒了就沒有大括號丟失,....格式輸出,你會看到:

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

編輯(回答你的評論): 這是一個有效的JSON字符串:

[{"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"}]

格式化:

[ 
    { 
     "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" 
    } 
] 

在你一個有"values":之間的一些隱藏的字符。

+0

感謝reply..but看到我得到的JSON [{「type」:「select」,「label」:「Select」,「className」:「form-control」, 「name」:「select-1496823185891」,「values」:[{「label」:「Option 1」,「value」:「option-1」,「selected」:true},{「label」:「Option 2 「,」value「:」option-2「},{」label「:」Option 3「,」value「:」option-3「}]},{」type「:」text「,」label「:」文本字段「,」className「:」form-control「,」name「:」text-1496823186970「,」subtype「:」text「}] ..這是我想要轉換成地圖的json –

+0

@SarthakNegi你發佈的一個沒有通過http://json.parser.online.fr/ – kism3t