Джексон Джсон к объектам

1

Я не могу для жизни понять, как разобрать этот json файл на объекты с помощью jackson.

Вот мой json файл:

  {
  "file": "phrases",
  "use": "quotes",
  "famous_phrases": [
      {
      "phrase1": "one for all",
      "phrase2": "all for one",
      "id": 1
      },
      {
      "phrase1": "four scores",
      "phrase2": "and seven years ago",
      "id": 17
      },
      {
      "phrase1": "elementary",
      "phrase2": "my dear watson",
      "id": 22
      }
  ]
  }

Я попробовал это:

BufferedReader fileReader = new BufferedReader(new FileReader("./test.json"));
ObjectMapper mapper = new ObjectMapper();
JsonNode quotes = mapper.readValue(fileReader, JsonNode.class);
quotes = quotes.get("famous_phrases");
TypeReference<List<Quotes>> phrases = new TypeReference<List<Quotes>>(){};
List<Quotes> q = mapper.readValue(quotes.traverse(), phrases);
for (Phrases element : q) {
    System.out.println(element.getPhrase1());
}

С POJO я сделал, но я думаю, что, возможно, неправильно сделал POJO. Я определил все атрибуты (файл, использование, known_phrases), и каждый из них имеет свой собственный набор и методы get. Любая помощь в этом будет оценена!

  • 0
    То, что у вас там, не является действительным JSON. Он содержит 2 объекта JSON, разделенных запятой. Таким образом, вы не можете разобрать это.
  • 0
    Этот JSON недействителен
Показать ещё 2 комментария
Теги:
jackson

2 ответа

2
Лучший ответ

Файл json:

{
    "file": "phrases",
    "use": "quotes",
    "famous_phrases": [
    {
        "phrase1": "one for all",
        "phrase2": "all for one",
        "id": 1
    },
    {
        "phrase1": "four scores",
        "phrase2": "and seven years ago",
        "id": 17
    },
    {
        "phrase1": "elementary",
        "phrase2": "my dear watson",
        "id": 22
    }
    ]
}

Фасоль:

public class Quotes {

    private String file;
    private String use;
    private List<Phrases> famous_phrases;

    public String getFile() {
        return file;
    }

    public void setFile(String file) {
        this.file = file;
    }

    public String getUse() {
        return use;
    }

    public void setUse(String use) {
        this.use = use;
    }

    public List<Phrases> getFamous_phrases() {
        return famous_phrases;
    }

    public void setFamous_phrases(List<Phrases> famous_phrases) {
        this.famous_phrases = famous_phrases;
    }

}

public class Phrases {

    private String phrase1;
    private String phrase2;
    private String id;

    public String getPhrase1() {
        return phrase1;
    }

    public void setPhrase1(String phrase1) {
        this.phrase1 = phrase1;
    }

    public String getPhrase2() {
        return phrase2;
    }

    public void setPhrase2(String phrase2) {
        this.phrase2 = phrase2;
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

}

прочитайте файл json:

BufferedReader fileReader = new BufferedReader(new FileReader("./test.json"));
ObjectMapper mapper = new ObjectMapper();
Quotes quotes = mapper.readValue(fileReader, Quotes.class);
for (Phrases element : quotes.getFamous_phrases()) {
  System.out.println(element.getPhrase1());
}
  • 0
    Спасибо, после исправления моего JSON, это работает намного лучше.
0

Вы должны определить корневой узел (заверните код json с помощью {})

{
    "member1": {
       "file": "phrases",
       "use": "quotes"
    },
    "member2": {
       "famous_phrases": [{
           "phrase1": "one for all",
           "phrase2": "all for one",
           "id": 1
       },
       {
           "phrase1": "four scores",
           "phrase2": "and seven years ago",
           "id": 17
       },
       {
           "phrase1": "elementary",
           "phrase2": "my dear watson",
           "id": 22
       }
    }]
}
  • 0
    Спасибо за помощь, после просмотра моего файла JSON был неправильным, это также очень помогает.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню