我有一个菜单的JSON文件。因此,存在一个带有披萨的数组,该数组内部是一个名为ingredient
的数组,其中包含来自成分的id
。
所以我想创建具有pizza
数组的属性和ingredient
数组的值的对象。
我的错误如下:
java.lang.IllegalArgumentException(在START_OBJECT令牌之外)
我已经创建了一个仅访问pizza
数组的对象。
在代码中,您可以看到我如何尝试对其进行转换。
代码段
public static void main(String[] args)
throws JsonGenerationException, JsonMappingException, IOException
{
//File file = new File("path");
ObjectMapper mapper = new ObjectMapper();
try
{
JsonNode gesMenu = mapper.readValue(file, JsonNode.class);
JsonNode jMenu = gesMenu.get("Menu");
JsonNode gesIngredient = jMenu.get("ingredient");
Ingredient[] cIngredient = mapper.convertValue(gesIngredient, Ingredient[].class);
System.out.println(cIngredient[7].getDescription());;
JsonNode gesPizza = jMenu.get("pizza");
System.out.println("\n" + gesPizza);
//These last two lines cause Errors
Pizza2[] pPizza = mapper.convertValue(gesPizza, Pizza2[].class);
System.out.println(pPizza[0]);
}
...
这是JSON文件的示例:
{
"menu" : {
"pizza" : [
{
"nr" : 1,
"description" : "Pizza Salami",
"ingredient" : [
{
"id" : 0
}
],
"Picture" : "Salami.jpg"
}
]
}
}
答案 0 :(得分:1)
根据您提供的JSON字符串的结构以及您在注释中提到的内容,有一种简单的方法可以将整个JSON字符串转换为嵌套的POJO,如下所示:
ObjectMapper mapper = new ObjectMapper();
MyJsonObject myJsonObj = mapper.readValue(jsonStr, MyJsonObject.class);
System.out.println(myJsonObj.toString());
控制台输出
MyJsonObject [menu =菜单[pizza = [Pizza [nr = 1,description = Pizza Salami,Ingredient = [Ingredient [id = 0,description = null,priceSmall = null,priceMedium = null,priceBig = null]]]], picture = Salami.jpg]]]]
嵌套的POJO看起来像:
class MyJsonObject {
private Menu menu;
//general getters and setters
//toString()
}
class Menu {
private List<Pizza> pizza;
//general getters and setters
//toString()
}
class Pizza {
private int nr;
private String description;
private List<Ingredient> ingredient;
@JsonProperty("Picture")
private String picture;
//general getters and setters
//toString()
}
class Ingredient {
private int id;
private String description;
private String priceSmall;
private String priceMedium;
private String priceBig;
//general getters and setters
//toString()
}
然后,您可以像访问Java中的对象一样轻松访问pizza
或ingredient
JSON数组!