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

Spring解析数据json时如何处理空值

艾照
2023-03-14

我使用spring解析数据json,格式如下:

请求

 {
"fiSessionKey": "NiceTest_2021111723",
"fiCode": "B100000022",
"taskCode": "KYC_VR2_RQST",
"appNumber": "APPL000000000000999",
"customerNumber": "12345678",
"mobilePhoneNumber": "0988021309",
"infoProvConcent": "Y"
}

答复:

{
"appNumber": "APPL000000000000999",
"fiCode": "B100000022",
"taskCode": "KYC_VR2_RQST",
"customerNumber": "12345678",
"productCode": "S2028",
"infoProvConcent": "Y",
"niceSessionKey": "S202820220712182525939485",
"responseTime": "20220712182553",
"responseCode": "P000",
"responseMessage": "Normal - [20] Thông tin trong lịch sử",
"mobilePhoneNumber": "0988021309",
"result": [
    {
        "msisdn": "84865214351",
        "total_calls": 9,
        "total_durations": 305
    },
    {
        "msisdn": "84973853818",
        "total_calls": 7,
        "total_durations": 140
    }
]
}

这是我在课堂上的方法:

@RequestMapping("/api/v1/ccpCheck")
@ResponseBody
public ResponseEntity<ReturnMessage> checkCCPHistoryCustomerPoint(@RequestParam Map<String, Object> params, ModelMap model) throws Exception {

    ReturnMessage message = new ReturnMessage();
    RestTemplate restTemplate = new RestTemplate();

    String url = "https://myserverIP:80/kyc/KYC_VR2_RQST";

    String token = AppConstants.FICODE;

    JSONObject jsonObject =  new JSONObject();
    JSONArray jsonArray =  new JSONArray();

    int recordSuccess = 0 , recordFail = 0;

    try {

        String fiSessionKey = "NiceTest_2021111723";
        String fiCode = "B100000022";
        String taskCode = "KYC_VR2_RQST";
        String appNumber = "APPL000000000000999";
        String customerNumber = "12345678";                 
        String mobilePhoneNumber = "0988021309";        
        String infoProvConcent = "Y";

        jsonObject.put("fiSessionKey", fiSessionKey);
        jsonObject.put("fiCode", fiCode);
        jsonObject.put("taskCode", taskCode);
        jsonObject.put("appNumber", appNumber);
        jsonObject.put("customerNumber", customerNumber);
        jsonObject.put("mobilePhoneNumber", mobilePhoneNumber);
        jsonObject.put("infoProvConcent", infoProvConcent);
        jsonArray.put(jsonObject);    

         jsonArray.put(jsonObject);
         System.out.println("params -> {}" + jsonObject);             

        HttpHeaders headers = new HttpHeaders();
        headers.add("token", token);
        headers.add("Content-Type", "application/json; charset=utf-8");

        HttpEntity<String> entity = new HttpEntity<String>(jsonObject.toString(), headers);
        String result = restTemplate.postForObject(url, entity, String.class);

        LOGGER.debug("============================log result begin==========================================");
        LOGGER.debug(result);
        LOGGER.debug("header    : "     + entity.getHeaders());
        LOGGER.debug("body      : "     + entity.getBody());
        LOGGER.debug("=======================log result end=================================================");

调用API之后,解析数据,下一步将按行归属消息插入数据。然后循环获取列表中的数据

        try {

            if(result != null && !result.isEmpty()) {

                ObjectMapper mapper = new ObjectMapper();
                mapper.configure(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY, true);

                @SuppressWarnings("unchecked")
                List<Map<String, Object>> listSendMessage = mapper.readValue(result, List.class);

                for(int i=0 ; i < listSendMessage.size() ; i++) {

                    Map<String, Object> dataSend = (Map<String, Object>)  listSendMessage.get(i);
                    // Map<String, Object> sendMessage = (Map<String, Object>) dataSend.get("result");

                    System.out.println("================================");
                    System.out.println(dataSend);

                    Map <String, Object> saveParams = new HashMap<String, Object>();

                    saveParams.put("customerNumber", dataSend.get("customerNumber"));
                    saveParams.put("responseTime", dataSend.get("responseTime"));

                    saveParams.put("msisdn", dataSend.get("msisdn"));
                    saveParams.put("total_calls", dataSend.get("total_calls"));
                    saveParams.put("total_durations", dataSend.get("total_durations"));

                    saveParams.put("mobilePhoneNumber", dataSend.get("mobilePhoneNumber"));
                    saveParams.put("infoProvConcent", dataSend.get("infoProvConcent"));
                    saveParams.put("appNumber", dataSend.get("appNumber"));
                    saveParams.put("productCode", dataSend.get("productCode"));
                    saveParams.put("taskCode", dataSend.get("taskCode"));
                    saveParams.put("responseTime", dataSend.get("responseTime"));
                    saveParams.put("responseMessage", dataSend.get("responseMessage"));
                    saveParams.put("responseCode", dataSend.get("responseCode"));
                    saveParams.put("fiCode", dataSend.get("fiCode"));
                    saveParams.put("fiSessionKey", dataSend.get("fiSessionKey"));

                    System.out.println(saveParams);

                    int resultInsert = 0;

                    resultInsert = cCPHistoryService.insert_KYC_VR2_RQST(saveParams);

                    LOGGER.info("Result Inserting -> {}: " + resultInsert);
                }
                /*
                Map<String, Object> mapFromString = new HashMap<String, Object>();
                mapFromString = mapper.readValue(result, HashMap.class);

                @SuppressWarnings("unchecked")
                Map<String, Object> saveParameter = (Map<String, Object>) mapFromString.get("result");

                System.out.println(saveParameter);

                System.out.println(sendMessage);
                Map <String, Object> saveParams = new HashMap<String, Object>();

                saveParams.put("customerNumber", sendMessage.get("customerNumber"));
                saveParams.put("responseTime", sendMessage.get("responseTime"));
                saveParams.put("msisdn", sendMessage.get("msisdn"));

                System.out.println(saveParams);*/

            }
            else {
                message.setMessage("There are " + recordFail + "fail");
                return ResponseEntity.ok(message);
            }
        }
        catch(Exception e) {
            message.setMessage(e.toString());
            e.printStackTrace();
            return ResponseEntity.ok(message);
        }
        message.setMessage("There are " + recordSuccess + "successul");
        return ResponseEntity.ok(message);
    }
    catch (HttpClientErrorException exception) {
        // TODO Auto-generated catch block
        org.springframework.http.HttpStatus status = exception.getStatusCode();         
    }
    catch (JSONException e) {           
        e.printStackTrace();
        return ResponseEntity.ok(message);
    }
}

当我运行此方法时,我可以从json数据中获取结果,但只有3个字段无法获取值,并且为null:

 msisdn=null
 total_calls=null
 total_durations=null

如何获得msisdn、total\u调用、total\u循环持续时间的值?非常感谢

共有1个答案

孙佑运
2023-03-14

你可以用更好的方式来做,但我不知道完整的要求,所以不能多加评论,但是在解决方案中,你实现的dataSend对象包含结果数据作为映射,键作为结果,因此如果你尝试下面的方法,它将为你所需的标记提供结果,其余的你可以根据你的要求实现-

Map<String, Object> saveParams = new HashMap<String, Object>();
List<Map<String,Object>> resultList = (List<Map<String, Object>>) dataSend.get("result");
                System.out.println(resultList);
                for (Map<String, Object> map:resultList                         ) {
                   System.out.println(map.get("msisdn"));
                   System.out.println(map.get("total_calls"));
                   System.out.println(map.get("total_durations"));
                }
 类似资料:
  • 当作为参数传递时,为什么调用具有类型为的参数的方法,而不是调用具有类型为的参数的方法?

  • 本文向大家介绍JavaScript处理解析JSON数据过程详解,包括了JavaScript处理解析JSON数据过程详解的使用技巧和注意事项,需要的朋友参考一下 JSON (JavaScript Object Notation)一种简单的数据格式,比xml更轻巧。 JSON 是 JavaScript 原生格式,这意味着在 JavaScript 中处理 JSON 数据不需要任何特殊的 API 或工具包

  • 本文向大家介绍Spring mvc JSON数据交换格式原理解析,包括了Spring mvc JSON数据交换格式原理解析的使用技巧和注意事项,需要的朋友参考一下 什么是JSON JSON(JavaScript Object Notation, JS 对象标记) 是一种轻量级的数据交换格式,目前使用特别广泛。 采用完全独立于编程语言的文本格式来存储和表示数据。 简洁和清晰的层次结构使得 JSON

  • 问题内容: 我有一个AJAX调用,返回的是这样的JSON: 在div中,我将得到: 如何遍历此数据并将每个名称放在div中? 问题答案: 假设您的服务器端脚本未设置正确的响应标头,则需要使用参数向jQuery指示这是JSON 。 然后,您可以使用该函数遍历数据: 或使用方法:

  • 问题:假设有一个json对象如下: 现在以上对象在服务端被格式化stream流返回(一个请求,分为多个片段返回),并且每个片段的内容都是不确定的,前端接收到内容后,都需要用JSON.parse解析代码,并渲染到界面上。 假设服务端返回的每个片段可能如下: 从上面可以看出,服务端每个片段返回到可能是总的json中任意片段长度的字符串,前端需要每次都能解析出来,我的理解是每次都自动拼接对应的后续缺失的

  • 本文向大家介绍Spring mvc如何实现数据处理,包括了Spring mvc如何实现数据处理的使用技巧和注意事项,需要的朋友参考一下 处理提交数据 1、提交的域名称和处理方法的参数名一致 提交数据 : http://localhost:8080/hello?name=xiaohua 处理方法 : 后台输出 : xiaohua 2、提交的域名称和处理方法的参数名不一致 提交数据 : http://