我正在使用 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/