android Jackson json对象映射器数组反序列化

发布于 2024-10-17 22:25:44 字数 595 浏览 1 评论 0原文

我需要帮助将 Jackson 映射器的响应解析为 POJO。我有这样的回应:

 "data": [{
        "item": {
            "downloaded": false,
            "moderated": false,
            "add": false
        }
    },
    {
        "item": {
            "downloaded": false,
            "moderated": false,
            "add": false }
// more

那么我如何将这个与映射器绑定到 POJO? 这是我正在尝试的课程,但它返回“项目”无法识别且不允许被忽略。

public ArrayList<Item> data =  new ArrayList<Item>();

其中 item 是一个带有构造函数的公共静态类 Item,并且上面的所有字段都带有 getter 和 setter。

我该怎么做。我似乎无法在任何地方找到如何以这种方式从数组读取数据。

i need help parsing a response with the jackson mapper to a POJO. i have this as a response:

 "data": [{
        "item": {
            "downloaded": false,
            "moderated": false,
            "add": false
        }
    },
    {
        "item": {
            "downloaded": false,
            "moderated": false,
            "add": false }
// more

so how do i bind this one with the mapper to a POJO?
here is my class that i am trying but it returns that "item" is not recognized and not allowed to be ignored.

public ArrayList<Item> data =  new ArrayList<Item>();

where item is a public static class Item with constructors and all the fields above with getters and setters.

how do i do this. i cant seem to find anywhere how to read data from an array this way.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

隱形的亼 2024-10-24 22:25:44
JsonNode jsonNode = mapper.readValue(s, JsonNode.class); 
JsonNode userCards = jsonNode.path("data");
List<Item> list = mapper.readValue(userCards.toString(), new TypeReference<List<Item>>(){});
JsonNode jsonNode = mapper.readValue(s, JsonNode.class); 
JsonNode userCards = jsonNode.path("data");
List<Item> list = mapper.readValue(userCards.toString(), new TypeReference<List<Item>>(){});
何以畏孤独 2024-10-24 22:25:44

您的示例缺少几个部分(尤其是 Item 的定义),无法了解您的结构是否兼容;但一般来说 JSON 和 Object 结构需要匹配。因此,您至少需要类似:

public class DataWrapper {
  public List<Item> data; // or if you prefer, setters+getters
}

如果是这样,您将绑定:

DataWrapper wrapper = mapper.readValue(json, DataWrapper.class);

并按如下方式访问数据

List<Item> items = wrapper.data;

Your example is missing couple of pieces (esp. definition of Item), to know if your structure is compatible; but in general JSON and Object structures need to match. So, you would at least need something like:

public class DataWrapper {
  public List<Item> data; // or if you prefer, setters+getters
}

and if so, you would bind with:

DataWrapper wrapper = mapper.readValue(json, DataWrapper.class);

and access data as

List<Item> items = wrapper.data;
千紇 2024-10-24 22:25:44

这是我的 maziar 代码的变体。

List<Item> list = mapper.readValue( s, new TypeReference<List<Item>>(){} );

它只是消除了首先转换为 JsonNode 的过程,而是直接转换为 List;仍然工作正常,输出项目列表。

Here's my variant of maziar's code.

List<Item> list = mapper.readValue( s, new TypeReference<List<Item>>(){} );

It just eliminates the converting first to a JsonNode and converts instead directly to a List; still works fine, outputting a list of Items.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文