当前位置: 首页 > 知识库问答 >
问题:

使用杰克逊 API 将 JSON 对象转换为 Java 对象。将 JSON 数组转换为 Java 对象时出现的问题

薄瑞
2023-03-14

我的服务以JSONArray的形式收到响应。我想将这个JSONArray转换为JavaObject(使用POJO类)。我使用Jackson API进行JSON到JavaObject的转换。我还为该转换编写了帮助类(类名:JsonUtil)。

请在下面找到我的 JSON 响应,其中包含 JSON 对象以及 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
             }
          ],

       }
]

由此,如果未显示order_items数组,则可以进行转换。如果出现order_items数组,则表示它抛出以下错误。

错误:将JSON转换为Java Objects时发生异常,无法反序列化Java.util的实例。ArrayList在[Source:java.io.StringReader@3444d69d; 行:1,列:352](通过引用链:com.util.OrderHeader[“order_items”])

请在下面找到我的客户代码:

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());
    }

OrderHeaderPOJO类:

public class OrderHeader {

    String order_number;
    String customer_name;

    List<OrderItem> order_items;
    //Setters & Getters method

}

OrderItemPOJO类:(它应该是OrderHeaderPOJO类别中的JSONArray)

public class OrderItem {

    String line_id;
    String line_number;
    String product_code;
    String product_description; 
    Long product_quantity;  

    //Getters & Setters method

}

请找到我的帮助类将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;

    }
}

共有1个答案

柯升
2023-03-14

您可以使用ObjectMapper,如下所示:

private ObjectMapper objectMapper = new ObjectMapper();

List<Event> events = readValue(jsonString, new TypeReference<List<Event>>() {});

当然,您需要将其包装在尝试捕获块中。

 类似资料:
  • 例如:Date值为:“dateCollected”:fri Jul 07 00:00:00 IST 1989, 但它只服用星期五而不是整个日期。

  • 问题内容: 我正在将struts2用于Action,将jquery用于UI … 我想知道如何将Map对象转换为JSON对象并将其发送回UI, 现在可以在JSP页面中将其打印为普通的Java Map对象: 但我希望它是这样的: 我将如何实现这一目标…? 问题答案: 尝试Gson: 不过,我不建议将这种代码放入JSP。诸如此类的事情应该存在于Servlet或Action类之类的控制器中。 您还绝对不希

  • 问题内容: 我有一个JSON对象,我将其转换为并在此处进行一些处理。稍后,我想转换相同的缓冲区数据以转换为有效的JSON对象。 我正在研究Node V6.9.1 下面是我尝试过的代码,但是当我转换回JSON却无法打开该对象时遇到了。 所以我尝试使用检查方式打印整个对象 如果我尝试像数组一样读取它 我也尝试解析它抛出 我需要将其视为我创建的真实对象(我的意思是像上面声明的那样)。 请帮忙.. 问题答

  • 问题内容: 我希望能够从Java操作方法中的JSON字符串访问属性。只需说一下即可使用该字符串。下面是该字符串的示例: 在此字符串中,每个JSON对象都包含其他JSON对象的数组。目的是提取ID列表,其中任何给定对象都具有包含其他JSON对象的group属性。我将Google的Gson视为潜在的JSON插件。谁能提供某种形式的指导,说明如何从此JSON字符串生成Java? 问题答案: 我将Goog

  • 我正试图将下面的json转换成java bean,需要你的帮助 Sort.json 我的豆子看起来像 我的测试课是 我看到的错误是 请建议:

  • 问题内容: 我希望我的JSON看起来像这样: 到目前为止的代码: 和 我只是缺少如何使用Jackson将Java对象转换为JSON的部分: 我的问题是:我的课程正确吗?我必须调用哪个实例,以及如何实现此JSON输出? 问题答案: 要使用Jackson 转换JSON: