Есть ли способ создать объект с атрибутом из нескольких массивов? - PullRequest
0 голосов
/ 21 октября 2019

У меня есть файл 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"
      }
    ]
  }
}

1 Ответ

1 голос
/ 22 октября 2019

Согласно структуре предоставленной вами строки 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 салями, ингредиент = [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()
}

Тогда вы можете получить доступ к обоим pizzaили ingredient JSON-массивы легко аналогичны действующим объектам в Java!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...