Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/351.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将JSON转换为java对象_Java_Json - Fatal编程技术网

使用Jackson将JSON转换为java对象

使用Jackson将JSON转换为java对象,java,json,Java,Json,早上好 我对java还比较陌生,并试图完成一个项目,但我遇到了一些问题。我的程序使用SQL构建URL来调用web服务,此服务将返回以下JSON: [{ "MmisItemNo": "106552", "CatalogNo": "UM18840041R", "ContractOn": "False" } ] 我需要做的是去掉最后的假值或真值,根据结果进行附加逻辑 我不断得到以下错误: .WebCall -com.fasterxml.jackson.databind.ex

早上好

我对java还比较陌生,并试图完成一个项目,但我遇到了一些问题。我的程序使用SQL构建URL来调用web服务,此服务将返回以下JSON:

[{
    "MmisItemNo": "106552",
    "CatalogNo": "UM18840041R",
    "ContractOn": "False"
 }
]
我需要做的是去掉最后的假值或真值,根据结果进行附加逻辑

我不断得到以下错误:

.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%确定。

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

因此,为了让Jackson正确地绘制地图,您应该这样做:

LightswitchResponse[] lightswitchResponses = 
      mapper.readValue(response.toString(), LightswitchResponse[].class);
然后,您可以从中读取第一个元素,以获得所需的LightSwitchResponse对象:

LightswitchResponse lightswitchResponse = lightswitchResponses[0];

我收到了你的错误信息,删除了所有自定义内容,然后在谷歌上搜索。这是第一个结果。在发帖之前,请养成这样做的习惯。看到了吧。很抱歉,我不知道我的情况是否与我使用杰克逊时有所不同。在下一篇文章之前,我会做更多的研究,谢谢!感谢您的回复,当我尝试使用该附加行时,我得到以下错误:表达式的类型必须是数组类型,但它已解析为LightswitchResponse我在第二行上遗漏了一个s,我现在已将其修复。谢谢,现在错误更改为:无法识别的字段mmistemno c.LightswitchResponse,未标记为可忽略的3个已知属性:contractOn、catalogNo、mmisItemNo],位于[Source:String[{mmisItemNo:106552,catalogNo:UM18840041R,contractOn:False}];行:1,列:17]通过引用链:java.lang.Object[][0]在您的第一个代码上方添加了此代码:mapper.configureDeserializationFeature.FAIL_ON_UNKNOWN_属性,False;现在正在工作,谢谢!