我使用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循环持续时间的值?非常感谢
你可以用更好的方式来做,但我不知道完整的要求,所以不能多加评论,但是在解决方案中,你实现的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://