【问题标题】:How can I map title, value coming from API response into a Java object? [duplicate]如何将来自 API 响应的标题和值映射到 Java 对象中? [复制]
【发布时间】:2022-11-27 21:37:47
【问题描述】:

我有像下面这样的 json,我从第三方 API(它有像 excel 这样的文件)收到;

    {
  "items": [
    {
      "id": "3462645966",
      "name": "UK Professional Solutions",
      "column_values": [
        {
          "title": "email",
          "value": "test@gmail.com"
        },
        {
          "title": "policy",
          "value": null
        },
        {
          "title": "policyNumber",
          "value": 55315287813
        },
        {
          "title": "excess",
          "value": 0
        }
      ]
    },
    {
      "id": "3462645967",
      "name": "US Professional Solutions",
      "column_values": [
        {
          "title": "email",
          "value": "test@gmail.com"
        },
        {
          "title": "policy",
          "value": null
        },
        {
          "title": "policyNumber",
          "value": 55315287813
        },
        {
          "title": "excess",
          "value": 0
        }
      ]
    }
  ]
}

我想知道如何将 column_values 数组映射到这里的 java 类;

@Data
public class Item {
    private int id;
    private String name;
    @JsonProperty("column_values")
    private List<Column> columns;

    @Data
    public static class Column{
        private String email;
        private String policy;
        private long policyNumber;
    }

}

我怎样才能做这个映射或编组解组?是否有任何开源库可以帮助完成这项工作?这里有没有像Spark这样的数据处理库可以使用?

【问题讨论】:

  • 您没有展示您尝试过的内容(也没有描述失败的内容)。
  • @AlexanderIvanchenko column_values 带有标题和值,它不能映射到电子邮件,它是起始索引处的标题。我需要将此标题和值映射到 java 属性。您会看到电子邮件是 Java 端的属性和 API 响应端的标题。我需要找到一种方法将 java 属性映射到标题/值
  • “column_values 带有标题和值,无法映射到电子邮件”- 你能编辑这个问题并展示这个吗,即提供代码(即你如何尝试反序列化你的 JSON) 连同描述什么失败(如果您遇到异常 - 提供堆栈跟踪)。
  • 我不能使用 jackson 之类的库来将 json 编组/解编为 java 对象。我正在努力寻找如何完成这项工作。 API 给出标题和值...我希望标题成为 API 的属性名称和值,以便将值分配给这样的 java 对象属性; "email": "test@gmail.com" 来自 {"title": "email", "value":"test@gmail.com"}

标签: java


【解决方案1】:

请考虑您的嵌套类与您的主类同名并且您会遇到问题

无论如何关于将 jsonArray 映射到特定对象列表,您可以按照以下步骤操作:

1.将jackson-databind库添加到你的构建工具,如Gradle或Maven

2.在您的代码中:

ObjectMapper mapper = new ObjectMapper();

List<Item> itemtList = new ArrayList<>();

itemtList = Arrays.asList(mapper.readValue(jsonStringArray, Item[].class));

但是关于将整个 JsonString 解析为一个对象,您也可以这样做:

JSONObject.parseObject(itemsJsonString, Item.class);

【讨论】:

  • 请仔细阅读问题。我希望标题和值存在于 API 响应中以映射 java 属性。只有当 API 提供电子邮件、policyNumber 作为 API 响应的属性时,您的解决方案才会起作用。
猜你喜欢
  • 2019-07-22
  • 1970-01-01
  • 2020-09-13
  • 1970-01-01
  • 2021-01-15
  • 1970-01-01
  • 2020-01-01
  • 2021-09-20
  • 2014-01-21
相关资源
最近更新 更多