我试图遍历哈希映射并从值创建一个json字符串。我使用JSONSimple库来做到这一点。我有我想要的结构,但值被覆盖。我最终得到的结构是
{
"new_id":{
"coordinates_list":{
"Coordinates: ":[
"lat: 27.0",
"lon: 28.0"
]
},
"t0vhf40cv86t":[
"123"
]
}
}
但是JSON中应该有其他值。仅包含哈希映射的最后一行。我是否需要添加我写的另一个JSONObject?
JSONObject obj = new JSONObject(); // final json object written out
double lat = 20.00; // test data
double lon = 21.00; // test data
for (Map.Entry<String, List<String>> entry : data.entrySet()){
JSONObject childObj = new JSONObject();
JSONObject coordObj = new JSONObject();
JSONArray entities = new JSONArray();
JSONArray coordinates = new JSONArray();
String key = entry.getKey();
List<String> values = data.get(key);
for(String value : values){
entities.add(value);
}
childObj.put(key,entities);
// increments the test data
lat = lat +1;
lon = lon + 1;
coordinates.add("lat: " + lat);
coordinates.add("lon: " + lon);
coordObj.put("Coordinates: " ,coordinates);
childObj.put("coordinate list ", coordObj);
obj.put("new_id" , childObj);
}
答案 0 :(得分:2)
您一直在使用&#34; new_id&#34;作为&#34; obj.put&#34;的关键线。对于第一个映射条目,您可以在JSON对象上设置该键的值。对于每个后续条目,您将替换该键的值,而不是添加新键。这就是为什么只有地图中的最后一个条目在JSON中表示。
我不确定你要完成的是什么,但是你可能需要在每次循环时使用不同的密钥,或者使用JSONArray代替JSONObject,这样你就不会#39 ;根本不需要钥匙。