【问题标题】:Json Object DeserializationJson 对象反序列化
【发布时间】:2015-02-27 13:14:30
【问题描述】:

我想将以下 JSON 对象淡化为 Java 对象(位置类):

{
  "city": "TEST",
  "country": "TEST",
  "latitude": "1",
  "longitude": "1",
  "name": "TEST",
  "postalCode": "362001",
  "street": "TEST",
  "organization": 3
}

我的 Java 类是:

public class Location{
@ManyToOne
@ForeignKey(name = "FK_location__organization")
private Organization organization;

@NotNull
@Column(nullable = false)
private String name;

private boolean disabled;

private String street;
private String postalCode;
private String city;
private String country;

private Double latitude;
private Double longitude;

@Override
public String toString()
{
    return name;
}

public static List<Location> findAllLocationsOrderedByName()
{
    return entityManager().createQuery("SELECT o FROM Location o ORDER BY name ASC", Location.class).getResultList();}}

而且,组织类是:

public class Organization {
String name
}

尝试反序列化时出现以下错误:

flexjson.JsonNumber cannot be cast to java.util.Map
flexjson.factories.BeanObjectFactory.instantiate(BeanObjectFactory.java:17)
flexjson.ObjectBinder.bind(ObjectBinder.java:95)
flexjson.ObjectBinder.bindIntoObject(ObjectBinder.java:149)
flexjson.ObjectBinder.bind(ObjectBinder.java:95)
flexjson.ObjectBinder.bind(ObjectBinder.java:74)
flexjson.JSONDeserializer.deserialize(JSONDeserializer.java:158)
flexjson.factories.ClassLocatorObjectFactory.instantiate(ClassLocatorObjectFactory.java:38)

我使用以下代码(使用 Flex JSON)进行反序列化:

import flexjson.JSONDeserializer;
import flexjson.JSONSerializer;

public static Location Location.fromJsonToLocation(String json) {
    System.out.println(json);
    return new JSONDeserializer<Location>()
    .use(null, Location.class).deserialize(json);
}

【问题讨论】:

  • 所以?有什么问题?
  • 我想将该 Json 对象反序列化到 Java 类中。当我尝试时出现以下错误 flexjson.JsonNumber cannot be cast to java.util.Map flexjson.factories.BeanObjectFactory.instantiate(BeanObjectFactory. java:17) flexjson.ObjectBinder.bind(ObjectBinder.java:95) flexjson.ObjectBinder.bindIntoObject(ObjectBinder.java:149) flexjson.factories.ClassLocatorObjectFactory.instantiate(ClassLocatorObjectFactory.java:38) flexjson.ObjectBinder.bind(ObjectBinder. java:95) flexjson.ObjectBinder.bind(ObjectBinder.java:74) flexjson.JSONDeserializer.deserialize(JSONDeserializer.java:158)
  • 请用这个错误更新问题。另外请添加您使用什么工具来解析 JSON。
  • 你不认为应该向我们展示你所做的事情而不是你想要的吗?在不繁琐难读的问题中,cmets 会好很多。
  • 请在帖子中更新,不要在评论中更新

标签: json deserialization flexjson


【解决方案1】:

看看 Json 中的组织价值。它是整数值,但在 Java 对象中是组织

【讨论】:

  • 那么,我需要传递什么?我应该通过这个 json 对象 { "city": "TEST", "country": "TEST", "latitude": "1", "longitude": "1", "name": "TEST", "postalCode" :“362001”,“街道”:“TEST”,“组织”:{“id”:3,“名称”:“TEST”} }
  • 谢谢老兄,它正在工作.. :)
【解决方案2】:

您可以使用 ObjectMapper 将您的 json 数据通过以下 sn-p 转换为相应的 Object:

ObjectMapper mapper = new ObjectMapper();
Location location= mapper.readValue(jsonData, Location.class);

【讨论】:

  • @Devloper 您是否看到任何异常或任何错误消息??
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多