【问题标题】:How to map JSON data into any Object in JAVA?如何将 JSON 数据映射到 JAVA 中的任何对象?
【发布时间】:2014-08-23 01:00:12
【问题描述】:

我想使用 Jersey 将 JSON-Response 映射到我的 Java 对象中。我有这样的 Json 响应:

{
  "act": "add",
  "col": "student",
  "data": [
  {
     "firstName": "alex",
     "lastName": "homer",
     "age": "18",
     "roomNo": "1301"
  },
  {
     "firstName": "alex",
     "lastName": "homer",
     "age": "18",
     "roomNo": "1301"
  }
  ]
}

这是我想将 Json 响应映射到的 bean:

@XmlRootElement(name = "request")
@XmlAccessorType(XmlAccessType.FIELD)
public class RequestAction implements RequestOperations {

   @XmlElement(required = true, name = "act")
   private String action;

   @XmlElement(required = true, name = "col")
   private String collectionName;

   @XmlElement(required = false, name = "oid")
   private String objectId;

   @XmlElement(name = "data")
   private List<Object> data;

   public RequestAction() {
}

//getters setters
}

那么,我的问题是如何映射"data": {[....]}下的数据? 因为它也可以用任何Object 来识别。

在本例中,对象是Customer。如果对象是StudentAnimal 或其他任何东西呢?如果可能,我不需要创建该对象(我的意思是Customer 和其他对象)。 你有什么想法或建议吗?

【问题讨论】:

  • '如果对象是 Student、Animal 或其他任何东西呢?这行不通。您必须使用比 Object 更具体的类。
  • 如果它会是任何东西,那么我想你应该使用 Map 来包含所有值。
  • 西科尔斯基,你的意思是像这样使用 Map field = new HashMap() ?
  • 如果所有数据都是同一类型,只需指定类型即可。否则,找到一个共同点(接口或抽象类),并使所有可以进入数据的类都扩展/实现这个超类型。
  • 看看Jackson多态反序列化:wiki.fasterxml.com/JacksonPolymorphicDeserialization

标签: java json object map jersey


【解决方案1】:

如果您的 bean 属性名称与 JSON 相同,则可以使用 json-lib。 对于 maven 项目,只需放

<dependency> <groupId>net.sf.json-lib</groupId> <artifactId>json-lib</artifactId> <version>2.4</version> <classifier>jdk15</classifier> </dependency>

进入 pom.xml。

JSONObject jsonObject = (JSONObject) JSONSerializer.toJSON(YOUR JSON STRING); RequestAction re = (RequestAction) JSONObject.toBean(jsonObject,RequestAction.class);

【讨论】:

  • '如果您的 bean 属性名称与您的 JSON 相同' 不是这种情况,因为没有 Object 的属性可以将 firstNamelastName 映射到。
  • 如果 List 元素是 Object ,这段代码会将 net.sf.ezmorph.bean.MorphDynaBean 放入列表中。您可以创建一个名为 data 的新 bean 来放置 firstName lastName,这样,您需要将代码更改为 Map classMap = new HashMap(); classMap.put("data", Data.class); RequestAction re = (RequestAction) JSONObject.toBean(jsonObject,RequestAction.class);
【解决方案2】:

考虑使用 Gson 库:https://code.google.com/p/google-gson/ 那里的列表没有问题。

【讨论】:

    猜你喜欢
    • 2019-03-21
    • 2020-08-16
    • 2018-01-06
    • 2014-11-02
    • 1970-01-01
    • 2013-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多