使用Jackson

时间:2018-02-08 15:40:47

标签: java json

早上好,

我是java的新手,并试图通过一个项目,但我遇到了问题。我的程序使用SQL构建一个URL来调用Web服务,该服务将返回以下JSON:

[{
    "MmisItemNo": "106552",
    "CatalogNo": "UM18840041R",
    "ContractOn": "False"
 }
]

我需要做的是在结尾处去除“False”或“True”值,以根据其结果执行其他逻辑。

我一直收到以下错误:

.WebCall -com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot 
deserialize instance of `.LightswitchResponse` out of START_ARRAY token at [Source: (String)"[{"MmisItemNo":"106552","CatalogNo":"UM18840041R","ContractOn":"False"}]"; line: 1, column: 1]

这是我在WebCall.java类中构建URL之后的代码:

BufferedReader in = new BufferedReader(
new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
    response.append(inputLine);
    }
    in.close();
    System.out.println(response.toString());
ObjectMapper mapper = new ObjectMapper();
LightswitchResponse lightswitchResponse = mapper.readValue(response.toString(), LightswitchResponse.class);
System.out.println(lightswitchResponse.ContractOn);

在我的第二课中,代码如下:

public class LightswitchResponse {

String MmisItemNo;
String CatalogNo;
boolean ContractOn;

public String getMmisItemNo() {
    return MmisItemNo;
}
public void setMmisItemNo(String mmisItemNo) {
    MmisItemNo = mmisItemNo;
}
public String getCatalogNo() {
    return CatalogNo;
}
public void setCatalogNo(String catalogNo) {
    CatalogNo = catalogNo;
}
public boolean ContractOn() {
    return ContractOn;
}
public void setContractOn(boolean contractOn) {
    ContractOn = contractOn;
}

}

关于可能出错的任何想法?我觉得它可能与JSON响应上的[]有关,但不是100%肯定。

1 个答案:

答案 0 :(得分:1)

你是对的,因为JSON响应的[]。这意味着要返回的JSON对象是一个对象数组。

因此,要让杰克逊正确地映射它,你应该这样做:

LightswitchResponse[] lightswitchResponses = 
      mapper.readValue(response.toString(), LightswitchResponse[].class);

然后,您可以从中读取第一个元素以获取所需的LightSwitchResponse对象:

LightswitchResponse lightswitchResponse = lightswitchResponses[0];