在開發過程中,遇到過一種一開始覺得很莫名其妙的情況——在將json解析成一個map的時候,會出現順序顛倒的情況,雖然數據讀取和存儲都沒有出錯,但是順序的顛倒在開發中處理特定問題時也是一件很令人頭疼的事情,那麼爲什麼會出現這種情況,怎麼避免出現這種情況呢?(解決方法來源於網絡)
跟蹤fastjson源碼,在com.alibaba.fastjson.parser.DefaultJSONParser 類中475行發現:
else if (ch == '{') { // 減少嵌套,兼容android
lexer.nextToken();
final boolean parentIsArray = fieldName != null && fieldName.getClass() == Integer.class;
JSONObject input = new JSONObject(lexer.isEnabled(Feature.OrderedField));
在fastjson會進行Feature.OrderField的判斷,如果在解析json的時候加上這一條屬性,即可解決json解析後亂序的問題,具體代碼如下:
HashMap m= JSON.parseObject(json,LinkedHashMap.class,Feature.OrderedField);