[英]Converting JSONObjects to JavaObjects using Jackson API. Issue while converting JSONArray to java objects
Am getting response from my service as JSONArray.正在从我的服务作为 JSONArray 得到响应。 I want to convert this JSONArray to JavaObjects ( using POJO class).我想将此 JSONArray 转换为 JavaObjects(使用 POJO 类)。 Am using Jackson API for JSON to JavaObject conversion.我正在使用 Jackson API 进行 JSON 到 JavaObject 的转换。 I also written helper class for that conversion ( class name : JsonUtil ).我还为该转换编写了帮助类(类名: JsonUtil )。
Please find my JSON response below that containing JSONObjects as well as JSONArray too.请在包含 JSONObjects 和 JSONArray 的下面找到我的 JSON 响应。
[
{
"order_number":"1000123",
"customer_name":"Johnson Controls - ISC"
"order_items":[
{
"line_number":"1",
"product_code":"YMPA0100|Base",
"product_description":"YMPA0100",
"line_id":"c435d1bf-f9d4-47e6-b867-cda612429a6f",
"product_quantity":1
},
{
"line_number":"1",
"product_code":"YMPA0100|Base",
"product_description":"YMPA0100",
"line_id":"c435d1bf-f9d4-47e6-b867-cda612429a6f",
"product_quantity":2
},
{
"line_number":"1",
"product_code":"YMPA0100|Base",
"product_description":"YMPA0100",
"line_id":"c435d1bf-f9d4-47e6-b867-cda612429a6f",
"product_quantity":2
}
],
}
]
From this, am able to convert if order_items
array is not presented.由此,如果order_items
数组未显示,则可以进行转换。 If order_items
array is presented means it throws the below error.如果order_items
数组出现意味着它会抛出以下错误。
Error : Exception occured while converting JSON into Java ObjectsCan not deserialize instance of java.util.ArrayList out of START_OBJECT token at [Source: java.io.StringReader@3444d69d;错误:将 JSON 转换为 Java 对象时发生异常无法从 START_OBJECT 令牌中反序列化 java.util.ArrayList 的实例 [来源:java.io.StringReader@3444d69d; line: 1, column: 352] (through reference chain: com.util.OrderHeader["order_items"])行:1,列:352](通过参考链:com.util.OrderHeader["order_items"])
Please find my client code below :请在下面找到我的客户端代码:
public class Demo {
public static <Order> void main(String[] args) {
Client client = Client.getInstance();
client.start();
String findOrderString =
client.findOrder("","1000123",").toString();
String result = findOrderString.replaceAll("[\\[\\] ]","");
System.out.println("JsonString:::"+result);
OrderHeader so=JsonUtil.convertJsonToJava(result,
OrderHeader.class);
System.out.println("==>"+so.getCustomer_name()+",
"+so.getOrder_number());
}
OrderHeader
POJO class: OrderHeader
POJO 类:
public class OrderHeader {
String order_number;
String customer_name;
List<OrderItem> order_items;
//Setters & Getters method
}
OrderItem
POJO class : ( which should be a JSONArray in OrderHeader
POJO class ) OrderItem
POJO 类:(应该是OrderHeader
POJO 类中的 JSONArray)
public class OrderItem {
String line_id;
String line_number;
String product_code;
String product_description;
Long product_quantity;
//Getters & Setters method
}
Please find my helper class to conver JSON to JavaObject请找到我的助手类将 JSON 转换为 JavaObject
public class JsonUtil {
private static ObjectMapper mapper;
static{
mapper=new ObjectMapper();
}
public static <T> T convertJsonToJava(String jsonString, Class<T> cls)
{
T result=null;
try {
result=mapper.readValue(jsonString, cls);
} catch (JsonParseException e) {
System.out.println("Exception occured while converting JSON into
Java Objects"+e.getMessage());
return result;
}
}
You can use ObjectMapper as below:您可以使用 ObjectMapper 如下:
private ObjectMapper objectMapper = new ObjectMapper();
List<Event> events = readValue(jsonString, new TypeReference<List<Event>>() {});
of course, you'll need to wrap it in try catch block.当然,您需要将其包装在 try catch 块中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.