首页 > 解决方案 > 动态映射 json

问题描述

我需要动态构建 JSON 并需要调用外部 API。例如,输入:"FIRST_NAME": "XXX" 基于上面的输入,我需要动态构建一个 JSON,如下所示

{
  "Req":{
    "user":{
      "CreatedTime":"2017-03-02T07:52:58Z",
      "UpdatedTime":"2017-03-02T07:52:58Z",
      "Details":{
        "Names":[
          {
            "Name":{
              "First":"kirtq"
            }
          }
        ]
      }
    }
  }
}

如果我得到联系电话作为输入:CONTACT_NUMBER:889999999 那么我必须构建一个如下所示的 JSON

{
  "UpdateMemberReq": {
    "Customer": {
      "CreatedTime": "2017-03-02T07:52:58Z",
      "UpdatedTime": "2017-03-02T07:52:58Z",
      "CustomerDetails": {
        "Contacts": {
          "MobilePhone": {
            "value": "07888728687"
          }
        }
      }
    }
  }
}

像这样,每个请求我都有大约 30 个字段,我将根据我必须动态构建 JSON 来获得一个字段,一旦我动态准备 JSON,我必须通过将此 JSON 作为原始类型传递来调用外部 API(POST)身体。我已经实现如下。

List list = new ArrayList();

        Name user = mapper.readValue(json2, Name.class);
        System.out.println(user);

        Map<String, Object> name1 = new HashMap<>();
        name1.put("Name", user);
        list.add(name1);

        Map<String, Object> map1 = new HashMap<>();
        map1.put("Names", list);

        Map<String, Object> map2 = new HashMap<>();
        map2.put("CustomerDetails",map1);

        Map<String,Object> map = new HashMap();
        map.put("Customer",map2);

任何人都可以向我建议在 java/spring boot 中处理这个问题的最佳方法吗?

谢谢!!

标签: java

解决方案


任何人都可以向我建议在 java/spring boot 中处理这个问题的最佳方法吗?

鉴于您没有要为其创建 JSON 的固定模式,您必须完全按照您的方式进行操作。

这意味着动态组装地图,然后将其映射到json string.

您可以做的改进是尝试提取通用和可重用的组件,以构建请求的某些部分。

我建议您创建一个类结构,以使某些类的事情易于管理,例如...

  1. JsonGenerationService(其余代码使用的主要服务)
  2. UserJsonGenerator-> 为用户实体生成 JSON
  3. CustomerJsonGenerator-> 为客户生成 JSON
  4. JsonGeneratorCommon-> 包含所有常用方法

推荐阅读