我正在使用Java 12 / Jacskon 2.9.9进行“读取”和“写入”,其中包含非常简单的JSON数组。
我正在将其读入可以完美运行的地图。
问题是,编写更新的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"
}
]
我正在将此文件读取到一个List <>中,该列表运行得很好。我可以使用此列表来做有意义的事情。
这个想法是,通过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 );
更新
为昨晚我的含糊而道歉,我很累。
但是,现在我根据以下迈克尔的回答有了一个可行的解决方案。使用列表,而不是地图。
如果有人遇到此问题(或供我将来参考),请在此处修改和工作代码
List<Object> jsonList = new ArrayList<Object>( map.values( ) );
ObjectMapper mapper = new ObjectMapper( );
String jsonOutput = mapper.writerWithDefaultPrettyPrinter( ).writeValueAsString( jsonList );
答案 0 :(得分:1)
Map始终转换为JSON对象,而不转换为JSON数组。所以您的结果是预期的。如果您想要原始的JSON格式,则应将数据转换为List<Map<String, Object>>
或List<Map<String, String>>
,然后您将获得原始格式