Json对象进行pojo转换

时间:2017-06-27 09:44:01

标签: java json

我有一个像这样的json:

 "subject": {
 "category": [
  {
   "name": "name1"
  },
  {
   "name": "name2"
  },
  {
   "name": "name3"
  },
  {
   "name": "name4"
  }
 ]
}

所以它是一个包含名称数组的对象。什么可能是一个等效的Pojo呢?

我应该创建一个具有名为category?

的字符串列表的Subject对象

我试过了:

public class Subject {


@JsonProperty(value = "category")
private List<String> name;

//getter setter ...
}

但是我得到了嵌套异常:com.fasterxml.jackson.databind.JsonMappingException: Can not deserialize instance of java.lang.String out of START_OBJECT token

5 个答案:

答案 0 :(得分:2)

理想情况下,每个对象都应该是一个类,每个数组都应该是Java中的集合。 它应该是:

public class Subject {
    private List<Category> category;
    //getters and setters
 }


 class Category{
    String name;
   //getters and setters
 }

答案 1 :(得分:0)

是的,你是对的..你可以像你提到的那样实施POJO

class Subject{
  List<String> categories;

 // getters and setters
}

答案 2 :(得分:0)

你为什么不用Gson?它非常坚固且经过良好测试。

 Subject subject = new Gson().fromJson(jsonObject.toString(), Subject.class);

如果Gson不是这里的选项,你也可以试试这个

 public class Subject{
   private List<Category> category;
   //setter/getter(s)        

   private static class Category{
      String name;
   }
 }

答案 3 :(得分:0)

在这个json文件中,你有Subject对象包含一个对象数组&#34; category&#34;如果您需要来自该Subject对象的值,您应该像这样提取 的console.log(Subject.category [0]。名称);

答案 4 :(得分:0)

dev8080 answer之外,我建议您使用jsonschema2pojo服务。

如果您粘贴源JSON并选择Source type:JSON,您将获得以下输出:

---------------com.example.Subject.java---------------

package com.example;

import java.util.ArrayList;
import java.util.List;
import javax.validation.Valid;

public class Subject {

    @Valid
    private List<Category> category = new ArrayList<Category>();

    public List<Category> getCategory() {
        return category;
    }

    public void setCategory(List<Category> category) {
        this.category = category;
    }

}

---------------com.example.Category.java---------------

package com.example;

public class Category {

    private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

}

您可以使用选项轻松调整它或手动采用某些部分。

相关问题