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

使用JSON和Jackson libs将JSON映射回POJO

冉丰茂
2023-03-14

我有一个JSON字符串:

{
    "fruit": {
        "weight":"29.01",
        "texture":null
    },
    "status":"ok"
}

...我试图映射回POJO:

public class Widget {
    private double weight; // same as the weight item above
    private String texture; // same as the texture item above

    // Getters and setters for both properties
}

上面的字符串(我正在尝试映射)实际上包含在一个组织中。json。JSONObject,可以通过调用该对象的toString()方法来获取。

我想使用Jackson JSON对象/JSON映射框架来进行此映射,到目前为止,这是我最好的尝试:

try {
    // Contains the above string
    JSONObject jsonObj = getJSONObject();

    ObjectMapper mapper = new ObjectMapper();
    Widget w = mapper.readValue(jsonObj.toString(), Widget.class);

    System.out.println("w.weight = " + w.getWeight());
} catch(Throwable throwable) {
    System.out.println(throwable.getMessage());
}
Unrecognized field "fruit" (class org.me.myapp.Widget), not marked as ignorable (2 known properties: , "weight", "texture"])
    at [Source: java.io.StringReader@26c623af; line: 1, column: 14] (through reference chain: org.me.myapp.Widget["fruit"])

我需要地图绘制者:

  1. 完全忽略外部的花括号(“{”和“}”)

如果唯一的方法是调用JSONObjecttoString()方法,那么就这样吧。但我想知道Jackson是否提供了任何“开箱即用”的Java JSON库?

不管怎样,编写Jackson映射器是我的主要问题。谁能看出我哪里做错了?提前谢谢。

共有1个答案

岳均
2023-03-14

您需要有一个类PojoClass,它包含(has-a)Widget名为fruit的实例。

在您的映射器中尝试以下操作:

    String str = "{\"fruit\": {\"weight\":\"29.01\", \"texture\":null}, \"status\":\"ok\"}";
    JSONObject jsonObj = JSONObject.fromObject(str);
    try
    {
        // Contains the above string

        ObjectMapper mapper = new ObjectMapper();
        PojoClass p = mapper.readValue(jsonObj.toString(), new TypeReference<PojoClass>()
        {
        });

        System.out.println("w.weight = " + p.getFruit().getWeight());
    }
    catch (Throwable throwable)
    {
        System.out.println(throwable.getMessage());
    }

这是您的Widget类。

public class Widget
{    private double weight;
     private String texture;
    //getter and setters.
}

这是您的PojoClass

public class PojoClass
{
    private Widget fruit;
    private String status;
    //getter and setters.
}
 类似资料:
  • 问题内容: 我有以下JSON表示盐请求的服务器响应: 我尝试使用以下POJO映射它: 现在每次我这样做: 该为空。如何使用Gson将JSON映射到POJO?我的变量顺序对Gson映射重要吗? 问题答案: 我的变量顺序对Gson映射重要吗? 不,不是这样。 如何使用Gson将JSON映射到POJO? 它是 区分大小写 和JSON字符串键应该是相同的POJO类使用的变量名。 您可以使用@Seriali

  • 我有以下JSON来表示salt请求的服务器响应: 我尝试用以下POJO映射它: 每次我这样做: 为空。如何使用GSON将JSON映射到POJO?变量的顺序对Gson映射重要吗?

  • 问题内容: 我正在尝试将HTML映射到结构完整的JSON中。那里有没有这样做的库,还是我需要编写自己的库?我想如果没有html2json库,我可以以xml2json库作为开始。毕竟,html只是xml的一种变体,对吗? 更新: 好的,我应该举一个例子。我想做的是以下内容。解析html字符串: 变成这样的json对象: 注意 :如果您没有注意到标签,我正在寻找Javascript解决方案 问题答案:

  • 注:内容翻译自官网文档 Language Guide (proto3) 中的 JSON Mapping 一节 Proto3支持JSON格式的标准编码, 让在系统之间分享数据变得容易. 编码在下面的表格中以type-by-type的基本原则进行描述. 如果一个值在json编码的数据中丢失或者它的值是null, 在被解析成protocol buffer时它将设置为对应的默认值.如果一个字段的值正好是p

  • 问题内容: 我的实体是这样的: 现在,我想将此newPerson对象映射到这样的JSON对象中, 注意:以上仅是示例。 我需要的是,我需要在序列化时自定义Key。默认情况下,它以属性名称为键。我无法更改属性名称。这该怎么做? 另外,是否可以更改JSON obj中出现的键/值对的顺序? 问题答案: 您需要将属性添加到您的类和属性。套装的属性到您的自定义属性名称和属性属性定义的顺序。 然后,您可以执行

  • 我编写了货币转换器程序,从,映射对象并创建选定速率的简单数据集。我的程序运行得很好,直到我停止使用解析和映射对象,并用替换它。它可以很好地读取基础货币和日期,但不能读取<代码>汇率 子对象。为什么? 我的代码:类别: 类: 必须使用映射对象的类: 我试图解析和映射的示例JSON数据 我正在使用这个对象来准备对象,该对象具有一个简单的