var bom = [];
var Basket = [];
fruitObj{};
fruitObj.fruit = "Apple";
fruitObj.quantity = "1";
Basket.push[fruitObj]
fruitObj.fruit = "Grape";
fruitObj.quantity = "10";
Basket.push[fruitObj]
JSON(bom.push[Basket]) -> received at server
[[{\"fruit\":\"Apple\",\"quantity\":\"1\"},{\"fruit\":\"Grape\",\"quantity\":\"10\"}]]
Fruit.java
@JsonIgnoreProperties(ignoreUnknow = true)
class Fruit(){
String fruit;
String quantity;
String price;
//getters
//setters
}
At Controller
List<List<?>> list = mapper.readValue(bom,TypeFactory.defaultInstance().constructCollectionType(List.class, FruitList.class));
FruitList.java
FruitList() {
List<List<Fruit>> fruits;
//getters (List<List<Fruit>>)
//setters
}
org.codehaus.jackson.map.JsonMappingExceptionに直面しています:START_ARRAYトークンからインスタンスを逆シリアル化できません。
List <>、List <List <>>、List <MyObjList>、MyObjList <Fruit>などのさまざまな組み合わせを試しましたが、正確に解析できませんでしたが、Fruit.classを渡すことでマッパーをListとして解析できます。以下の文字列 [{\"fruit\":\"Apple\",\"quantity\":\"1\"},{\"fruit\":\"Grape\",\"quantity\":\"10\"}]
これを試して:
String json = "[[{\"fruit\":\"Apple\",\"quantity\":\"1\"},{\"fruit\":\"Grape\",\"quantity\":\"10\"}]]";
List<List<Fruit>> fruits = new ObjectMapper().readValue(json, new TypeReference<List<List<Fruit>>>() {});
もちろん、ObjectMapper
インスタンスを毎回作成しないように、インスタンスを再利用することを検討してください。
より高速な解決策は、次のように配列の配列を使用することです。
Fruit[][] fruits = new ObjectMapper().readValue(json, Fruit[][].class);
あなたはそれがあまり便利ではないと思うかもしれませんが。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加