com.alibaba.fastjson 如何按照顺序解析 JSONObject 对象?应用场景:比如按照顺序输出各个 key 的名称。

添加依赖

<dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
            <version>2.6</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.30</version>
        </dependency>

本次读取本地的一个文件 OwO.json,文件有接近 6000 行,有 18 个大对象。

public static void main(String[] args) throws IOException {
        Path path = Paths.get("/Users/xxx/Downloads/OwO.json");
        File file = new File(String.valueOf(path));
        String content = FileUtils.readFileToString(file, "UTF-8");
        LinkedHashMap<String, Object> map = JSON.parseObject(content,
                new TypeReference<LinkedHashMap<String, Object>>() {
                });
        for (Map.Entry<String, Object> entry : map.entrySet()) {
            System.out.println("- " + entry.getKey());
        }
    }

如何保证有序遍历?关键是靠 LinkedHashMap,引入的包有这些

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.TypeReference;
import org.apache.commons.io.FileUtils;

import java.io.File;
import java.io.IOException;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.LinkedHashMap;
import java.util.Map;

上述程序运行的结果如下,观察文件发现,这些 key 的确是有序的。

  • 颜文字
  • Emoji
  • Bilibili
  • Bilibili 小电视
  • Bilibili 2333 娘
  • Bilibili 蛆音娘
  • Bilibili 小黄脸
  • Bilibili HotKey
  • QQ
  • 恶搞 QQ
  • 嗷大喵小表情
  • 酷安
  • 酷币
  • 微博
  • 贴吧
  • Paopao
  • 钉钉
  • 阿鲁/aru

end.