[英]Iterate json from first to last element
我正在从JSON接收数据,其出现顺序很重要。 也就是说,索引0处的元素应字面上位于索引1处的元素之前,依此类推。
使用下面的代码片段遍历json(也将使用每个对象的键。)
JSONObject jObject = new JSONObject(string);
Iterator<String> keys = jObject.keys();
node = doc.createElement("ul");
while (keys.hasNext()) {
String _keys = (String) keys.next();
System.out.println(_keys); //other codes are here}
问题是这不会从头到尾访问json对象。 用示例json进行了测试,发现顺序不能真正确定。 有没有办法可以做到这一点?
根据定义,JSON对象没有成员顺序。 如果顺序很重要,请使用数组;如果顺序是字母顺序,请对键进行排序并在已排序的列表上进行迭代。
使用Jackson将JSONObject
转换为LinkedHashMap
,以维护密钥顺序。
LinkedHashMap <String,String> map =
new ObjectMapper().readValue(<JSON_OBJECT>, LinkedHashMap .class);
for (Map.Entry<String, String> entry : map.entrySet()) {
System.out.println("Key = " + entry.getKey() + ", Value = " + entry.getValue());
}
JSON本身不提供关键数据的顺序。 但是,某些JSON库允许它。 如果您能够使用第3方库,则json-simple提供了一种方法: https : //code.google.com/p/json-simple/
您无需创建由HashMap支持的JSON对象,而是创建由LinkedHashMap支持的JSON对象(来自https://code.google.com/p/json-simple/wiki/DecodingExamples#Example_4_-__Container_factory ):
String jsonText = "{\"first\": 123, \"second\": [4, 5, 6], \"third\": 789}";
JSONParser parser = new JSONParser();
ContainerFactory containerFactory = new ContainerFactory(){
public List creatArrayContainer() {
return new LinkedList();
}
public Map createObjectContainer() {
return new LinkedHashMap();
}
};
try {
Map json = (Map)parser.parse(jsonText, containerFactory);
Iterator iter = json.entrySet().iterator();
System.out.println("==iterate result==");
while(iter.hasNext()){
Map.Entry entry = (Map.Entry)iter.next();
System.out.println(entry.getKey() + "=>" + entry.getValue());
}
System.out.println("==toJSONString()==");
System.out.println(JSONValue.toJSONString(json));
}
catch(ParseException pe){
System.out.println(pe);
}
最终结果是将以正确的顺序进行迭代的Map。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.