com.alibaba.fastjson.JSONObject:
String在轉JSONObject,順序可能會改變,這樣如果需要對結果進行循環時就無法保證順序和想要的結果一致。
例如:
String textObject = "{\"row1\":{\"userNmae\":\"zhangsan\"},\"row2\":{\"userNmae\":\"lisi\"},\"row3\":{\"userNmae\":\"wangwu\"}}";
JSONObject json1 = JSONObject.parseObject(textObject);
Iterator<String> iterator = json1.keySet().iterator();
int i = 1;
while (iterator.hasNext()) {
String key = iterator.next();
System.out.println(i + " : " + json1.get(key));
i++;
}
想要結果:
1 : {"userNmae":"zhangsan"}
2 : {"userNmae":"lisi"}
3 : {"userNmae":"wangwu"}
實際結果:
1 : {"userNmae":"zhangsan"}
2 : {"userNmae":"wangwu"}
3 : {"userNmae":"lisi"}
解決辦法:
轉換時加上:Feature.OrderedField
例如:
String textObject = "{\"row1\":{\"userNmae\":\"zhangsan\"},\"row2\":{\"userNmae\":\"lisi\"},\"row3\":{\"userNmae\":\"wangwu\"}}";
int i = 1;
JSONObject json2 = JSONObject.parseObject(textObject, Feature.OrderedField);
Iterator<String> iterator2 = json2.keySet().iterator();
while (iterator2.hasNext()) {
String key = iterator2.next();
System.out.println(i + " : " + json2.get(key));
i++;
}
想要結果:
1 : {"userNmae":"zhangsan"}
2 : {"userNmae":"lisi"}
3 : {"userNmae":"wangwu"}
實際結果:
1 : {"userNmae":"zhangsan"}
2 : {"userNmae":"lisi"}
3 : {"userNmae":"wangwu"}
com.alibaba.fastjson.JSONArray:
根據JSONObject拓展一下:假如JSONArray中包含JSONObject,在調用“JSONObject.parseArray()”時也無法保證順序。
例如:
String textArray = "[{\"people\":{\"row1\":{\"userNmae\":\"zhangsan\"},\"row2\":{\"userNmae\":\"lisi\"},\"row3\":{\"userNmae\":\"wangwu\"}}}]";
JSONArray array1 = JSONObject.parseArray(textArray);
for (int i = 0; i < array1.size(); i++) {
JSONObject jsonObject = array1.getJSONObject(i);
Iterator<String> iterator = jsonObject.keySet().iterator();
while (iterator.hasNext()) {
String key = iterator.next();
JSONObject inner = jsonObject.getJSONObject(key);
Iterator<String> innerIter = inner.keySet().iterator();
int flag = 1;
while (innerIter.hasNext()) {
String innerKey = innerIter.next();
String innerValue = inner.getString(innerKey);
System.out.println(flag + " : " + innerValue);
flag++;
}
}
}
想要結果:
1 : {"userNmae":"zhangsan"}
2 : {"userNmae":"lisi"}
3 : {"userNmae":"wangwu"}
實際結果:
1 : {"userNmae":"zhangsan"}
2 : {"userNmae":"wangwu"}
3 : {"userNmae":"lisi"}
解決辦法:
參考JSONObject,加 “Feature.OrderedField”,並且轉換一下JSONArray的解析方式。
String textArray = "[{\"people\":{\"row1\":{\"userNmae\":\"zhangsan\"},\"row2\":{\"userNmae\":\"lisi\"},\"row3\":{\"userNmae\":\"wangwu\"}}}]";
//不直接轉Array,調用parse()方法,當作JSONObject轉,然后強制轉換。
JSONArray array1 = (JSONArray) JSONObject.parse(textArray, Feature.OrderedField);
for (int i = 0; i < array1.size(); i++) {
JSONObject jsonObject = array1.getJSONObject(i);
Iterator<String> iterator = jsonObject.keySet().iterator();
while (iterator.hasNext()) {
String key = iterator.next();
JSONObject inner = jsonObject.getJSONObject(key);
Iterator<String> innerIter = inner.keySet().iterator();
int flag = 1;
while (innerIter.hasNext()) {
String innerKey = innerIter.next();
String innerValue = inner.getString(innerKey);
System.out.println(flag + " : " + innerValue);
flag++;
}
}
}
實際結果:
1 : {"userNmae":"zhangsan"}
2 : {"userNmae":"lisi"}
3 : {"userNmae":"wangwu"}
