如何在反序列化JSON时解析“无法反序列化实例”

时间:2018-01-07 12:09:49

标签: java json spring spring-boot deserialization

我有一个JSON请求正文,如下所示

{
    "aaa": "value",
    "bbb": "value",
    "ccc":"value",
    "resultSuccess": {
      "geometry": {
        "type": "Point",
        "coordinates": [
          4.764638612000056,
          52.308615736000036
        ]
      }
    }
  }

结果字段有一个json值,我的pojo类看起来像

Class Pojo{
String aaa;
String bbb;
String ccc;
String resultSuccess;
}

这意味着我试图将结果中的json映射到字符串值。但我得到的错误

  JSON parse error: Can not deserialize instance of java.lang.String out of 
  START_OBJECT token; nested exception is 
  com.fasterxml.jackson.databind.JsonMappingException: Can not deserialize 
  instance of java.lang.String out of START_OBJECT token\n at [Source: 
  java.io.PushbackInputStream@5b405da4;

我尝试添加@JsonProperty(“resultSuccess”),但它不起作用,我仍然得到错误。有没有办法在不更改数据类型字符串的情况下执行此操作?

4 个答案:

答案 0 :(得分:0)

错误消息显示所有内容,resultSuccess是Json对象而不是字符串。您必须创建相应的Pojo或使用JSONObject

答案 1 :(得分:0)

  

无法从START_OBJECT

中反序列化java.lang.String的实例

正如@zakaria所提到的,错误说明了一切,如果你看resultSuccess,它不是String而是Object

"resultSuccess": {
      "geometry": {
        "type": "Point",
        "coordinates": [
          4.764638612000056,
          52.308615736000036
        ]
      }
    }

但是,在您的Pojo课程中,您已将其声明为String

 String resultSuccess;

它必须是相应的其他类型。一个例子可能是

<强> Geometry.java

class Geometry
{
    String type;
    double[] coordinates;
}

<强> ResultSuccess.java

class ResultSuccess
{
    Geometry geometry;
}

<强> Pojo.java

class Pojo
{
   String aaa;
   String bbb;
   String ccc;
   ResultSuccess resultSuccess;
}

答案 2 :(得分:0)

单步:

[20160103, 20160104, 20160105, 20160106, 20160107, 20160108, 20160109]
[20160626, 20160627, 20160628, 20160629, 20160630, 20160701, 20160702]
{ 201601: [ 20160103,
            20160104,
            20160105,
            20160106,
            20160107,
            20160108,
            20160109],
  201606: [ 20160626,
            20160627,
            20160628,
            20160629,
            20160630,
            20160701,
            20160702]}

其他方式使resultSuccess成为pojo

答案 3 :(得分:0)

使用此Conert Json to Java Pojo Class获取pojo的{​​{1}}课程。