java - JSON/Jackson 输出在每个节点上意外添加 "parent"元素

标签 java json jackson

我正在使用 Java 12/Jacskon 2.9.9 进行“读取”和“写入”,其中包含一个非常简单的 JSON 数组。

我正在将其读入完美运行的 map 中。

问题是在编写更新的 Map 时,我得到一个外部元素,该元素会导致一些嵌套并破坏我的代码。

原始 JSON

 [
        {
            "puid": "sys1",
            "host": "127.0.0.1",
            "syst": "U",
            "user": "xxxx",
            "pass": "secret"
        },
        {
            "puid": "sys2",
            "host": "myhost",
            "syst": "U",
            "user": "yyyy",
            "pass": "secret2"
        },
        {
            "puid": "sys3",
            "host": "localhost",
            "syst": "U",
            "user": "zzzz",
            "pass": "secret3"
        }
    ]

我正在将此文件读入列表<>,效果非常好。我可以使用这个列表来做有意义的事情。

这个想法是,通过 API 调用,我提供一个类似的 JSON 元素,它会使用以下格式的新元素和现有元素重写整个文件。

但是... 它是这样写的 - 外部 "sys1" , "sys2" , "sys3"元素/节点。

更新的 JSON

 {
      "sys1" : {
        "puid" : "sys1",
        "host" : "127.0.0.1",
        "syst" : "U",
        "user" : "xxxx",
        "pass" : "secret"
      },
      "sys2" : {
        "puid" : "sys2",
        "host" : "myhost",
        "syst" : "U",
        "user" : "yyyy",
        "pass" : "secret2"
      },
     "sys3" : {
        "puid" : "sys3",
        "host" : "localhost",
        "syst" : "U",
        "user" : "zzzz",
        "pass" : "secret3"
      },
    }

这可能是正确的编写方式,但不幸的是,我无法控制给定的 JSON 文件的格式。它们采用原始格式,显示在上方。

我尝试了很多方法,但没有成功。我尝试过几次网络搜索,但真的不知道要在搜索栏中输入什么内容(因此提出了这个更详细的问题)。

此时此刻,我已将代码放回这一简单的行,并根据 SO 的建议进行修复:)

String json = new ObjectMapper( ).writerWithDefaultPrettyPrinter( ).writeValueAsString( map );
<小时/>

更新

抱歉昨晚的含糊其辞,我很累。

但是,我现在有了一个基于迈克尔的以下答案的可行解决方案。使用列表,而不是 map 。

如果有人遇到此问题,请在此处修改和工作代码(或供我自己将来引用)

  List<Object> jsonList = new ArrayList<Object>( map.values( ) );
  ObjectMapper mapper = new ObjectMapper( );
  String jsonOutput = mapper.writerWithDefaultPrettyPrinter( ).writeValueAsString( jsonList );

最佳答案

Map 始终转换为 JSON 对象,而不是 JSON 数组。所以你的结果是预期的。如果您想要原始 JSON 格式,您应该将数据转换为 List<Map<String, Object>>List<Map<String, String>>然后你会得到你的原始格式

关于java - JSON/Jackson 输出在每个节点上意外添加 "parent"元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56778717/

相关文章:

java - OpenGL (ES) -- 当新对象添加到 ArrayList 时,多边形会暂时消失

JSON 和 jq 更新多个值

spring - 使用 spring、jackson 格式化 LocalDateTime

java - 相同返回类型的多个 Jackson 序列化程序

java - 如何将 List 包装为 Jackson 生成的 JSON 中的顶级元素

java - 找到二维数组邻居的值?

java - 使用对象实现 LruCache

java - 共享偏好不会立即改变值?

json - 用大数组解析 json

java - JSON 解析器错误