我有這個 String Json Payload
[
"key1":{
"atr1":"key1",
"atr2":"value1",
"atr3":"value2",
"atr4":"value3,
"atr5":"value4"
},
"key2":{
"atr1":"key2",
"atr2":"value5",
"atr3":"value6",
"atr4":value7,
"atr5":"value8"
}
]
我希望使用 Java 將其轉換為以下格式
[
{
"atr2":"value1",
"atr3":"value2",
"atr4":"value3,
"atr5":"value4"
},
{
"atr2":"value5",
"atr3":"value6",
"atr4": "value7",
"atr5":"value8"
}
]
改變它的最簡單方法是什么?
uj5u.com熱心網友回復:
你不能,因為下面的例子是不是有效json。使用這個 JSON 驗證器檢查一下。
如果您將其粘貼(我已經修復了一些缺少引號的基本錯誤)
{
{
"atr2":"value1",
"atr3":"value2",
"atr4":"value3",
"atr5":"value4"
},
{
"atr2":"value5",
"atr3":"value6",
"atr4":"value7",
"atr5":"value8"
}
}
你會得到這些錯誤...

如果您通過使用 ajson-array來包含您的資料將目標架構更改為類似的內容,則它可以作業。
[
{
"atr2":"value1",
"atr3":"value2",
"atr4":"value3",
"atr5":"value4"
},
{
"atr2":"value5",
"atr3":"value6",
"atr4":"value7",
"atr5":"value8"
}
]
如果這對你有用,那么這個問題可以通過使用ObjectMapper該類輕松解決。
- 您使用它來將原始 JSON 反實作為一個類,該類有兩個欄位“key1”和“key2”
- 提取這些欄位的值,然后將它們存盤在一個陣列中......
- 使用
ObjectMapper.
這里有一個鏈接,它解釋了如何使用ObjectMapper該類來實作上述目標。
編輯:
所以你需要以下類來解決這個問題......
存盤物件資料
class MyClass {
String atr2;
String art3;
}
然后你有一個容器類,用于存盤初始 json。
class MyClassContainer {
MyClass key1;
MyClass key2;
}
這是從原始 json 決議到 MyClassContainer
var mapper = new ObjectMapper()
var json = //Get the json String somehow
var myClassContainer = mapper.readValue(json,MyClassContainer.class)
var mc1 = myClassContainer.getKey1();
var mc2 = myClassContainer.getKey2();
var myArray = {key1, key2}
var resultJson = mapper.writeValueAsString(myArray)
uj5u.com熱心網友回復:
假設您將 JSON 更正為有效的(這涉及用花括號替換周圍的方括號,并在引號內正確括起屬性值),這里有一種更簡單的方法,它只涉及幾行核心邏輯。
try{
ObjectMapper mapper = new ObjectMapper();
mapper.configure( DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false );
HashMap<String, Data> map = mapper.readValue( jsonString, new TypeReference<HashMap<String, Data>>(){} );
String json = mapper.writeValueAsString( map.values() );
System.out.println( json );
}
catch( JsonProcessingException e ){
e.printStackTrace();
}
jsonString以上是您的原始 JSON 更正和有效的 JSON 輸入。- 還要注意
FAIL_ON_UNKNOWN_PROPERTIESto的設定false允許atr1在反序列化為 時被忽略Data。
由于我們完全拋棄了attr1它的價值,因此Data該類將代表除此之外的所有欄位。
private static class Data{
private String atr2;
private String atr3;
private String atr4;
private String atr5;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/349248.html
