Converting JSON to a java object using Jackson
本问题已经有最佳答案,请猛点这里访问。
早上好,
我是Java的新手,试图通过一个项目进行工作,但是我遇到了问题。我的程序使用SQL来构建URL来调用Web服务,该服务将返回以下JSON:
1 2 3 4 5 6 | [{ "MmisItemNo":"106552", "CatalogNo":"UM18840041R", "ContractOn":"False" } ] |
我需要做的是最后去除" False"或" True"值,以根据其结果执行其他逻辑。
我不断收到以下错误:
1 2 | .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之后,这是当前的代码:
1 2 3 4 5 6 7 8 9 10 11 12 | 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); |
在我的第二堂课中,代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | 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正确地映射它,您应该执行以下操作:
1 2 | LightswitchResponse[] lightswitchResponses = mapper.readValue(response.toString(), LightswitchResponse[].class); |
然后您可以从中读取第一个元素以获得所需的LightSwitchResponse对象:
1 | LightswitchResponse lightswitchResponse = lightswitchResponses[0]; |