假设我们有一个JAVA代码块,它正在遍历JSON文件。
*JAVAFile
// getting phoneNumbers
JSONArray ja = (JSONArray) jo.get("phoneNumbers");//jo is the JSONObject of the given JSON
//Iterating through phonenumbers
Iterator itr2 = ja.iterator();
while (itr2.hasNext())
{
Iterator<Map.Entry>itr1 = ((Map)itr2.next()).entrySet().iterator();
while (itr1.hasNext()) {
Map.Entry pair = itr1.next();
System.out.println(pair.getKey() + " : " + pair.getValue());
}
}
- JSONfile**
{
"firstName": "Souvik",
"lastName": "Dey",
"address": {
"streetAddress": "D P Rd",
"city": "Barasat",
"state": "WB",
"postalCode": 700126
},
"age": 23,
"phoneNumbers": [
{
"type": "personal",
"number": "#######23"
},
{
"type": "office",
"number": "########"
}
]
}
- 问题**
为什么我得到这个:
- 输出**
编号:##23
类型:个人
编号:#######
类型:办公室
- 期望**
类型:个人
编号:######23
类型:办公室
编号:########
2条答案
按热度按时间hjzp0vay1#
JSON中的Map元素不被视为有序数据。它以不同的顺序出现,原因类似于HashMap内容的顺序。您不应该期望HashMap按照您将内容放入其中的相同顺序迭代,对于来自JSON源的Map内容也是如此。
如果你想在JSON中保留Map数据的顺序,那么你应该将Map数据转换为数组并存储在JSON中。
n3ipq98p2#
您可以使用Jackson将JSON文件解析为
JsonNode
,获取phoneNumbers
字段并遍历节点。Jackson在引擎盖下使用了一个LinkedHashMap
,所以他们的密钥的原始顺序应该被保留。最安全的办法是将JSON反序列化为POJO。您可以使用Jackson读取JSON数据并将其解析为
Person
。输出: