2017-06-07 38 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