【问题标题】:Discrepancy in JSON ObjectMapper readValue parsing - gives Null sometimesJSON ObjectMapper readValue 解析中的差异 - 有时会给出 Null
【发布时间】:2014-09-09 10:45:44
【问题描述】:

我在使用 ObjectMaper 的 readValue() 解析 json 字符串时遇到了一个奇怪的情况。我正在使用 Jackson 2.4.1 和 Spring 4.0.6。 问题是,当提供给 readValue() 时,相同的 json 字符串有时会给出 null,有时会给出有效对象。
JSON 字符串

{"productGroupInfoTransport":    {"groupId":36,"range":"LMEURSMA","productType":"LMFE","status":"ANNOUNCE","regionsList":[],"productsList":[],"groupName":"Bright Start test"}}

代码:

public Object getData(String jSONObject, String action, String module)
        throws Exception {

    ObjectMapper mapper = new ObjectMapper();
    mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
    mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES,
            false); 
    mapper.configure(DeserializationFeature.FAIL_ON_NULL_FOR_PRIMITIVES,
            false); 
    mapper.configure(DeserializationFeature.ACCEPT_EMPTY_STRING_AS_NULL_OBJECT,
            false); 
    //mapper.configure(SerializationConfig.   WRITE_NULL_PROPERTIES, false);
    String transport = null;

    if (jSONObject.contains(ERROR)) {

        transport = "Exception";

        throw new Exception("Unable to read Data");
    } else {

        transport = getTransport(action, module);
    }

    Object transportObject = null;

    transportObject = mapper.readValue(jSONObject, getTransport(transport));

    return transportObject;

}

产品运输:

package com.leggmason.lmEPAM.transport;

import java.util.List;

import com.fasterxml.jackson.annotation.JsonProperty;
import com.leggmason.lmEPAM.model.ProductGroupModel;

public class ProductGroupTransport extends EPAMTransport<ProductGroupModel> {

@JsonProperty("productGroupInfoTransport")
protected ProductGroupModel modelObject;

@JsonProperty("productGroupTransport")
protected List<ProductGroupModel> data;

@JsonProperty("productGroupTransport")
@Override
public List<ProductGroupModel> getListData() {
    return this.data;
}

@JsonProperty("productGroupTransport")
@Override
public void setData(List<ProductGroupModel> data) {
    this.data = (List<ProductGroupModel>) data;

}

@Override
public String getModule() {

    return null;
}

@JsonProperty("productGroupInfoTransport")
@Override
public ProductGroupModel getObject() {
    return this.modelObject;
}

@JsonProperty("productGroupInfoTransport")
public void setObject(ProductGroupModel modelObject) {
    this.modelObject = modelObject;

}

@Override
public void setObject(Object modelObject) {
    // TODO Auto-generated method stub

}

}

在上面的代码中,当 JsonString 被传递时,有一次 ProductTransposrt 将使用 Object 正确填充其 modelObject 但当我重新启动服务器时,相同的 JSON 字符串将在解析后将 modelObject 设为 null。我不明白为什么。感谢您的帮助。

【问题讨论】:

    标签: java json spring jackson


    【解决方案1】:

    您可以尝试以下代码来解析 json 对象

    JSONObject obj = new JSONObject(jSONObject);
    JSONArray array = obj.getJSONArray("productGroupInfoTransport");
    System.out.println(array.getJSONObject(0).getString("groupId"))
    

    现在您可以正确解析 json 字符串了。 仅解析 json 字符串可能会有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-01-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-27
      相关资源
      最近更新 更多