首页 > 解决方案 > 打印带有有序属性的 JSON

问题描述

我有 JSON 与特定顺序的对象:

{
  "Aaa": {
    "Langs": {
      "Val": [
        "Test"
      ],
      "Pro": [
        "Test2"
      ]
    }
  },
  "Bbb": {
    "Langs": {
      "Val": [
        "Test"
      ],
      "Pro": [
        "Test2"
      ]
    }
  },
  "Ddd": {
    "Langs": {
      "Val": [
        "Test"
      ],
      "Pro": [
      ]
    }
  },
}

我想在和Ccc之间添加新对象。我试图像这样配置对象映射器:BbbDdd

ObjectMapper mapper = new ObjectMapper()
        .enable(SerializationFeature.INDENT_OUTPUT)
        .configure(MapperFeature.SORT_PROPERTIES_ALPHABETICALLY, true)
        .configure(SerializationFeature.ORDER_MAP_ENTRIES_BY_KEYS, true);

然后使用此代码打印,但Ccc在文件末尾结束。

DefaultPrettyPrinter prettyPrinter = new DefaultPrettyPrinter();
prettyPrinter.indentArraysWith(DefaultIndenter.SYSTEM_LINEFEED_INSTANCE);

//Write whole JSON in FILE
String finalJson = mapper.writer(prettyPrinter).writeValueAsString(rootFlores);
finalJson = finalJson.replaceAll("\\[ ]", "[" + System.lineSeparator() + "      ]");
finalJson = finalJson.replaceAll("/", "\\\\/");

Files.write(Paths.get("DictionaryFlores_new.json"), Collections.singleton(finalJson));

这里有一种如何打印 JSON 排序的方法吗?

标签: javajsonjackson

解决方案


杰克逊反序列化/序列化不排序属性

根据这个答案,杰克逊 SORT_PROPERTIES_ALPHABETICALLY 仅适用于 POJO 属性,不适用于地图。在 JSON 中,Map 和 Object 没有区别,所以需要先在 Map 中设置顺序,使用 LinkedHashMap 或 TreeMap


推荐阅读