fastjson解析字符串,字段按字符串中順序排列


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設置為默認值。

 

這應該只是一種解決方式,如果你有其他的方式,歡迎留言。

如果文章有什么不正確的地方,歡迎指出,我會第一時間改正。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM