weixin_36546457 2021-10-28 21:16 采纳率: 100%
浏览 16
已结题

android (JAVA) 求两组不同结构的JSON,根据其中相同的KEY,数据连接

第一组JSON:
[{"id":"206","name":"携程旅行网","create_user":"admin"},{"id":"208","name":"美团点评","create_user":"admin"},{"id":"218","name":"杭州飞猪","create_user":"admin"},{"id":"228","name":"艺龙网","create_user":"admin"}]

第二组JSON:
[{"id":"206","bfjl":"3","bfdate":"2021-10-11"},{"id":"228","bfjl":"13","bfdate":"2021-10-13"}]

需要的结果,根据ID相同,连接JSON,不存在的自动空值:
[{"id":"206","name":"携程旅行网","create_user":"admin","bfjl":"3","bfdate":"2021-10-11"},{"id":"208","name":"美团点评","create_user":"admin","bfjl":"","bfdate":""},{"id":"218","name":"杭州飞猪","create_user":"admin","bfjl":"","bfdate":""},{"id":"228","name":"艺龙网","create_user":"admin","bfjl":"13","bfdate":"2021-10-13"}]

请帮忙解答

  • 写回答

4条回答 默认 最新

  • hua-sky 2021-11-03 11:43
    关注
    
    
     class OneData {
            public String id;
            public String name;
            public String create_user;
        }
    
        class TwoData {
            public String id;
            public String bfjl;
            public String bfdate;
        }
    
        class Result {
            public String id;
            public String name;
            public String create_user;
            public String bfjl;
            public String bfdate;
        }
    
        public ArrayList<Result> converJson() {
            //结果集
            ArrayList<Result> result_list = new ArrayList<>();
            //step1: 转换数据
            // 第一组JSON:
            String json_one = "[{\"id\":\"206\",\"name\":\"携程旅行网\",\"create_user\":\"admin\"},{\"id\":\"208\",\"name\":\"美团点评\",\"create_user\":\"admin\"},{\"id\":\"218\",\"name\":\"杭州飞猪\",\"create_user\":\"admin\"},{\"id\":\"228\",\"name\":\"艺龙网\",\"create_user\":\"admin\"}]";
            ArrayList<OneData> Data_one = new Gson().fromJson(json_one, new TypeToken<ArrayList<OneData>>() {
            }.getType());
    
    
            String json_two = "[{\"id\":\"206\",\"bfjl\":\"3\",\"bfdate\":\"2021-10-11\"},{\"id\":\"228\",\"bfjl\":\"13\",\"bfdate\":\"2021-10-13\"}]";
            ArrayList<TwoData> Data_two = new Gson().fromJson(json_two, new TypeToken<ArrayList<TwoData>>() {
            }.getType());
            //step2: 筛选存储数据,组转数据
    
    
    //为什么不直接在 for 嵌套 for 对比查询呢?因为这样不止耗时,如果逻辑过多,容易出错
            if (Data_two.size() > Data_one.size()) {
                HashMap<String, OneData> hashMap = new HashMap<>();
                for (OneData oneData : Data_one) {
                    hashMap.put(oneData.id, oneData);
                }
    
                for (TwoData twoData : Data_two) {
                    Result result = new Result();
                    result.id = twoData.id;
                    result.bfjl = twoData.bfjl;
                    result.bfdate = twoData.bfdate;
                    if (hashMap.containsKey(result.id)) {
                        result.name = hashMap.get(result.id).name;
                        result.create_user = hashMap.get(result.id).create_user;
                    }
                    result_list.add(result);
                }
    
            } else {
                HashMap<String, TwoData> hashMap = new HashMap<>();
    
                for (TwoData twoData : Data_two) {
                    hashMap.put(twoData.id, twoData);
                }
                for (OneData oneData : Data_one) {
                    Result result = new Result();
                    result.id = oneData.id;
                    result.bfjl = oneData.name;
                    result.bfdate = oneData.create_user;
                    if (hashMap.containsKey(result.id)) {
    
                        result.id = hashMap.get(result.id).id;
                        result.bfjl = hashMap.get(result.id).bfjl;
                        result.bfdate = hashMap.get(result.id).bfdate;
                    }
                    result_list.add(result);
                }
            }
    
            return result_list;
        }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 11月16日
  • 已采纳回答 11月8日
  • 创建了问题 10月28日

悬赏问题

  • ¥15 C#调用python代码(python带有库)
  • ¥15 矩阵加法的规则是两个矩阵中对应位置的数的绝对值进行加和
  • ¥15 活动选择题。最多可以参加几个项目?
  • ¥15 飞机曲面部件如机翼,壁板等具体的孔位模型
  • ¥15 vs2019中数据导出问题
  • ¥20 云服务Linux系统TCP-MSS值修改?
  • ¥20 关于#单片机#的问题:项目:使用模拟iic与ov2640通讯环境:F407问题:读取的ID号总是0xff,自己调了调发现在读从机数据时,SDA线上并未有信号变化(语言-c语言)
  • ¥20 怎么在stm32门禁成品上增加查询记录功能
  • ¥15 Source insight编写代码后使用CCS5.2版本import之后,代码跳到注释行里面
  • ¥50 NT4.0系统 STOP:0X0000007B