首页 > 解决方案 > 如何在春季获得正确格式的json

问题描述

我正在使用 RestTemplate 和 JSONObject 从数据库获取数据并将帖子发送到服务器我的服务:

List<MyMap> customerList = customerService.getAllCustomerViewBasicInfo(params);

customerList 将从数据库中获取所有数据

我的控制器:

    JSONArray ja = new JSONArray();
    ja.put(customerList);

    JSONObject obmain1 = new JSONObject();
    obmain1.put("actionType", "update-contact");
    obmain1.accumulate("data", ja);

    JSONArray jomain1 = new JSONArray();
    jomain1.put(obmain1);

    JSONObject jomain = new JSONObject();
    jomain.put("userSender", "myemail@gmail.com");
    jomain.put("data", jomain1);

    System.out.println(jomain);

当我获取数据时,结果如下:(格式错误)

{
  "userSender": "myemail.com",
  "data": [
  {
    "actionType": "update-contact",
    "data": [
      [
        [
        {
          "name": "TEST",
          "lastname": "TESTER",
          "phones": "0165458852",
          "addresses": "TEST",
          "passport": "870402152364",
          "customerType": "company"
        },
        {
          "name": "TEST",
          "lastname": "TESTER1",
          "phones": "0165458852",
          "passport": "870402152364",
          "customerType": "company"
        }
        ]
       ]
     ]
     }
    ]
   }

但它是错误的格式...

我想得到正确的格式并期望如下:(正确的格式)

{
"senderUser": "myemail.com",
"data": [
    {
        "actionType": "update-contact",
        "data": {
            "name": "LƯƠNG BẢO  ",
            "lastname": "LONG",
            "type": 0,
            "title": "ms",
            "passport": "123123",
            "gender": 1,
            "dateOfBirth": "03-01-2021",
            "emails": [
                {
                    "value": "myemail.com"
                }
            ],
            "phones": [
                {
                    "value": "0902032618"
                }
            ],
            "addresses": [
                {
                    "addressDetail": "osaka",
                    "street": "36 osaka",
                    "city": "Tokio",
                    "state": "Tokio",
                    "country": {
                        "code": "JP",
                        "name": "japan"
                    }
                }
            ],
            "cusFields": [
                {
                    "600f9cb0f02f084bd8a3dcdb": "TEST"
                },
                {
                    "600fbc6ef02f084bd8a3f7bd": "TEST2"
                },
                {
                    "600fbc6ef02f084bd8a3f7be": "TEST3"
                }
            ],
            "customerType": "company",
            "600f9cb0f02f084bd8a3dcdb": "SME"
        }
    }
]
}

我怎样才能按预期获得正确的数据?多谢

标签: javajsonspringspring-bootrest

解决方案


首先,在您的customersList 列表中,电子邮件、电话和地址属性必须是对象列表类型,如果不是,则在进行json 序列化之前,您必须这样做,用逗号等分隔符分割字符串。

完成此操作后,您应该使用的代码是

List<JSONObject> jsonList = customerList.stream().map( cust -> {
       JSONObject obmain1 = new JSONObject();
       obmain1.put("actionType", "update-contact");
       obmain1.accumulate("data", cust);
  }).collect(Collectors.toList())

JSONObject jomain = new JSONObject();
    jomain.put("userSender", "myemail@gmail.com");
    jomain.put("data", jsonList);

推荐阅读