Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用jackson wtih java将json字符串转换为pojo时如何处理空值或空值_Java_Json_Jackson - Fatal编程技术网

使用jackson wtih java将json字符串转换为pojo时如何处理空值或空值

使用jackson wtih java将json字符串转换为pojo时如何处理空值或空值,java,json,jackson,Java,Json,Jackson,下面是我正在使用jackson转换为pojo的json响应- { paymentType": [ { "Monthly": ["Monthly", "Monthly"], "Prepaid": ["Prepaid", "Prepaid"] }, "" ] } 代码: String rspString = "{\"paymentType\": [{\"Monthly\": [\"Mon

下面是我正在使用jackson转换为pojo的json响应-

{
    paymentType": [
        {
            "Monthly": ["Monthly", "Monthly"],
            "Prepaid": ["Prepaid", "Prepaid"]
        },
        ""
    ]
}
代码:

String rspString = "{\"paymentType\": [{\"Monthly\": [\"Monthly\",\"Monthly\"],\"Prepaid\": [\"Prepaid\",\"Prepaid\"]},\"\"]}";

JsonUtil jsonUtil = new JsonUtil();
PaymentTypeResponse PaymentTypeRsp = new PaymentTypeResponse();
PaymentTypeRsp = (PaymentTypeResponse) jsonUtil.Json2Object(rspString, PaymentTypeRsp);
System.out.println(PaymentTypeRsp.getPaymentType().size());
我得到以下例外情况:

线程“main”中出现异常 com.fasterxml.jackson.databind.JsonMappingException:无法 实例化类型[简单类型,类]的值 com.test.sample.PaymentTypeResponse]来自字符串值(“”);不 单字符串构造函数/工厂方法

响应中有一个空白值,如何在转换为pojo时处理这些值

同样的,如果null存在,如何处理这种情况

任何指示都将不胜感激

提前谢谢

下面是课堂:

public class PaymentType 
{
    @JsonProperty("Monthly")
    public List<String> monthly;
    @JsonProperty("Prepaid")
    public List<String> prepaid;

     //getter and setters
}

public PaymentTypeResponse 
{
    @JsonProperty("paymentType")
    public List<PaymentType> paymentType;

    //setters and Getters
}
公共类付费类型
{
@JsonProperty(“每月”)
每月公开名单;
@JsonProperty(“预付”)
预付公众名单;
//二传手
}
公共付款类型响应
{
@JsonProperty(“paymentType”)
公共列表支付类型;
//二传手和接球手
}

根据您的pojo类,您的json不正确。在json中,“paymentType”数组中的第三个元素是一个空字符串,它应该是一个数组,也可以是null

从以下位置更改json-

{
    "paymentType": [{
        "Monthly": ["Monthly", "Monthly"],
        "Prepaid": ["Prepaid", "Prepaid"]
    }, ""]
}
为此—

{
    "paymentType": [{
        "Monthly": ["Monthly", "Monthly"],
        "Prepaid": ["Prepaid", "Prepaid"]
    }]
}
Json字符串-

 String rspString = "{\"paymentType\": [{\"Monthly\": [\"Monthly\",\"Monthly\"],\"Prepaid\": [\"Prepaid\",\"Prepaid\"]},null]}";
String rspString = "{\"paymentType\": [{\"Monthly\": [\"Monthly\",\"Monthly\"],\"Prepaid\": [\"Prepaid\",\"Prepaid\"]}]}";
或本条—

{
    "paymentType": [{
        "Monthly": ["Monthly", "Monthly"],
        "Prepaid": ["Prepaid", "Prepaid"]
    }, null]
}
Json字符串-

 String rspString = "{\"paymentType\": [{\"Monthly\": [\"Monthly\",\"Monthly\"],\"Prepaid\": [\"Prepaid\",\"Prepaid\"]},null]}";
String rspString = "{\"paymentType\": [{\"Monthly\": [\"Monthly\",\"Monthly\"],\"Prepaid\": [\"Prepaid\",\"Prepaid\"]}]}";

如果您只接收到
null
或空字符串,而不是正确表示
PaymentType
类的JSON对象,那么在
ObjectMapper
中设置以下反序列化功能就足够了:

mapper.enable(DeserializationFeature.ACCEPT_EMPTY_STRING_AS_NULL_OBJECT);
现在,空字符串将被强制为
null
,您将不再有此问题


一种更通用的方法(尽管处理起来更复杂)是向
PaymentType
类添加一个接受
String
参数的构造函数:

public PaymentType() {
}

public PaymentType(String json) {
    // parse the json string here and initialize members
}
在接收
String
参数的构造函数中,可以根据需要解析字符串


请注意,您还需要添加no-args构造函数,以便Jackson可以从有效的JSON反序列化。

请添加PaymentTypeResponse类Hi感谢您的回复,我无法更改JSON的开发方式,因为它包含空值。基于这个json,我编写了这个类。我无法编写第3个,因为它包含空值,因此您必须编写自己的自定义反序列化程序,这可能会有所帮助-