JSONObject、JSONArray、实体List数组间格式转换

业务需求:向magic-api发送JSON类型请求数据,将请求得到的数据转换为实体List数组返回

实现思路:

        1.将magic-api请求数据使用JSONObjetc.parseObject()函数转换为JSONObject

        2.将发送请求后获取的数据使用JSON.toJSONString()进行转换;

        3.将转换后的String类型数据再使用JSONArray.parseArray()函数转换为JSONArray数组类型数据;

        4.再定义一个JSONObject类型变量,用于将上一步获取的JSONArray数组数据的进行转换,转换为实体类对应的Key;

        5.定义实体类数组用于存放转换了Key后的数据;

        6.遍历JSONArray数组的Key,将其Key设置为需要的Key,随后存入之前定义的JSONObject变量中;

        7.定义实体变量,将JSONObject中的数据使用JSONObject.toJavaObject(JSONObject,parseObject(JSONObject.toJSONString(jsonObject数据)),实体类.class)函数转换为实体对象;

        8.将转换后的实体对象存入步骤5中创建的实体数组;

        9.根据获取到的状态码返回不同的数据。

具体实现:

@Override

public MultiResponse getLeaderboards(RemoteRequest remoteRequest){

        JSONObject ranking = JSONObject.parseObject(JSON.toJSONString(remoteRequest));

        MultiResponse rsp = restTemplateService.postForJson(url,ranking,MultiResponse.class);

        JSONArray jsonArray = JSONArray.parseArray(JSON.toJSONString(rsp.getData()));

        JSONObject jsonObject1 = new JSONObject();

        List<LeaderboardResult> results = Lists.newArrayList();

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

                JSONObject jsonObject = jsonArray.getJSONObject(i);

                for(String key:jsonObject.keySet()){

                        if("abc".euals(key)){

                                jsonObject1.put("attributeScore",jsonObject.get(key));

                        } else if("def".euals(key)){

                                jsonObject1.put("attributeScore",jsonObject.get(key));

                        } else {

                                jsonObject1.put(key,jsonObject.get(key));

                        }

                }

                LeaderboardResult leaderboardResult = JSONObject.toJavaObject(JSONObject.parseObject(JSONObject.toJSONString(jsonObject1)),LeaderboardResult.class);

                results.add(leaderboardResult);

        }

        if(CommonConstant.JUICER_SUCCESS_CODE.equals(rsp.getCode())){

                if(results != null && results.size() >0){

                        return MultiResponse.of(results);

                }

        } else {

                throw new PortraitsException("数据查询失败,请检查!")

        }

        return MultiResponse.of(null);

}


版权声明:本文为Ricardo5566原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。