fastjson在把字符串解析成Json對象時,可以通過指定Feature.OrderedField來使Json對象中的元素按字符串中的順序排列。
但在把字符串解析成JsonArray時好像沒有這樣的參數可以設置。
在查看源碼后發現JSONArray.parseArray內部調用了new JSONObject(lexer.isEnabled(Feature.OrderedField))
public final boolean isEnabled(Feature feature) { return isEnabled(feature.mask); } public final boolean isEnabled(int feature) { return (this.features & feature) != 0; }
這里的this.features實際就是JSON.DEFAULT_PARSER_FEATURE
廢話少說,上代碼:
public static void main(String[] args) { String str = "{\"b\":321,\"a\":123}"; JSONObject json = JSONObject.parseObject(str); System.out.println(json);//結果為:{"a":123,"b":321} JSONObject json2 = JSONObject.parseObject(str, Feature.OrderedField); System.out.println(json2);//結果為:{"b":321,"a":123} String arrStr = "[{\"b\":321,\"a\":123}]"; JSONArray array = JSONArray.parseArray(arrStr); System.out.println(array);//結果為:[{"a":123,"b":321}] int temp = JSON.DEFAULT_PARSER_FEATURE; JSON.DEFAULT_PARSER_FEATURE = Feature.config(JSON.DEFAULT_PARSER_FEATURE, Feature.OrderedField, true); JSONArray array2 = JSONArray.parseArray(arrStr); JSON.DEFAULT_PARSER_FEATURE = temp; System.out.println(array2);//結果為:[{"b":321,"a":123}] }
說明:
如果沒有設置Feature.OrderedField則json對象中的元素按字典順序排列,
如果設置了Feature.OrderedField則按字符串中的順序排列。
JSON.DEFAULT_PARSER_FEATURE是全局的,如果不希望影響其他功能,建議在完成字符串解析后再把JSON.DEFAULT_PARSER_FEATURE設置為默認值。
這應該只是一種解決方式,如果你有其他的方式,歡迎留言。
如果文章有什么不正確的地方,歡迎指出,我會第一時間改正。