杰克逊杰森的对象

时间:2014-03-29 07:47:02

标签: java json jackson

我不能为我的生活弄清楚如何使用jackson将这个json文件解析为对象。

这是我的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。我定义了所有属性(file,use,famous_phrases),每个属性都有自己的set和get方法。对此有任何帮助将不胜感激!

2 个答案:

答案 0 :(得分: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());
}

答案 1 :(得分: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
       }
    }]
}