JAVA,当某个json数据中一个字段与另一个json数据中的字段值相同时,对两个json进行合并且相加,

原JSON串:[{"depid":"5","score":"10"},{"depid":"4","score":"40"},{"depid":"4","score":"3... 原JSON串:[{"depid":"5","score":"10"},{"depid":"4","score":"40"},{"depid":"4","score":"30"},"depid":"5","score":"30"}]
结果::[{"depid":"5","score":"40"},{"depid":"4","score":"70"}],
具体的java代码做参考。谢谢!
展开
 我来答
貌似風輕
推荐于2018-02-14 · TA获得超过7280个赞
知道大有可为答主
回答量:1672
采纳率:94%
帮助的人:696万
展开全部

要判断json数据的字段与其他数据是否相同,那么肯定是要先解析json数据。解析json数据的方式很多,Gson、FastJson都是很简便实用的工具。这里以Gson为例。

import java.lang.reflect.Type;
import java.util.*;

import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;

public class Divination {
    public static void main(String[] args) {
        String jsonStr = "[{\"depid\":\"5\",\"score\":\"10\"},{\"depid\":\"4\",\"score\":\"40\"},{\"depid\":\"4\",\"score\":\"30\"},{\"depid\":\"5\",\"score\":\"30\"}]";
        System.out.println("原始的json字符串:" + jsonStr);

        // 解析
        Gson gson = new Gson();
        Type type = new TypeToken<ArrayList<JsonData>>() {
        }.getType();
        ArrayList<JsonData> list = gson.fromJson(jsonStr, type);

        // 合并
        List<JsonData> ordered = new ArrayList<>();
        Map<Integer, JsonData> map = new HashMap<>();
        for (JsonData jsonData : list) {
            JsonData data = map.get(jsonData.getDepid());
            if (data != null) { // depid相同的合并score字段
                data.setScore(data.getScore() + jsonData.getScore());
            } else {
                map.put(jsonData.getDepid(), jsonData);
                ordered.add(jsonData);
            }
        }

        // 还原为json字符串
        System.out.println("合并后json字符串:" + gson.toJson(map.values()));
        System.out.println("合并后json字符串(按原来的顺序):" + gson.toJson(ordered));
    }
}

class JsonData {
    private int depid;
    private int score;

    public int getDepid() {
        return depid;
    }

    public void setDepid(int depid) {
        this.depid = depid;
    }

    public int getScore() {
        return score;
    }

    public void setScore(int score) {
        this.score = score;
    }
}

以上代码中List<JsonData> ordered = new ArrayList<>();是为了按原json数组的顺序输出合并后的结果,如果对顺序无要求可以删除相关代码。

运行结果:

侠们figo
2015-08-19 · TA获得超过152个赞
知道小有建树答主
回答量:246
采纳率:50%
帮助的人:91.9万
展开全部
将json转化为list 然后遍历list中的map 得到新的list 在转成json
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
yugi111
推荐于2018-02-06 · TA获得超过8.1万个赞
知道大有可为答主
回答量:5.1万
采纳率:70%
帮助的人:1.3亿
展开全部
String str = "[{\"score\": \"10\",\"depid\": \"5\"},{\"score\": \"40\",\"depid\": \"4\"},{\"score\": \"30\",\"depid\": \"4\"},{\"score\": \"30\",\"depid\": \"5\"}]";
JSONArray array = (JSONArray) JSONSerializer.toJSON(str);
HashMap<String,String> map = new HashMap<String,String>();
for(int i = 0; i < array.length; i++){
    JSONObject obj = array[i];
    String depid = obj.getString("depid");
    String score = obj.getString("score");
    String s1 = map.get(depid);
    if(null == s1){
        map.put(depid, score);
    }else{
        int s = Interger.parseInt(s1);
        map.put(depid, score + s);
    }
}

foreach map for convert to JSON again
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友8752761
2015-08-19 · TA获得超过296个赞
知道小有建树答主
回答量:509
采纳率:0%
帮助的人:315万
展开全部
这只能通过遍历原来的数组,然后再处理啊。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
一孕三年傻
推荐于2016-11-22
知道答主
回答量:10
采纳率:0%
帮助的人:10.8万
展开全部
public static void main(String[] args)
    {
        String string = "[{\"depid\":\"5\",\"score\":\"10\"},{\"depid\":\"4\",\"score\":\"40\"},{\"depid\":\"4\",\"score\":\"30\"},{\"depid\":\"5\",\"score\":\"30\"}]";
        JSONArray fromObject = JSONArray.fromObject(string);
        Map<String,Integer> map = new HashMap<String, Integer>();
       
        for (Object object : fromObject)
        {
            JSONObject jsonObject = (JSONObject) object;
            String depid = (String)jsonObject.get("depid");
            Integer score = Integer.valueOf((String)jsonObject.get("score"));
            if (map.containsKey(depid))
            {
                int integer = map.get(depid);
                map.put(depid, integer+score);
            }
            else
            {
                map.put(depid, score);
            }
        }
        Set<Entry<String, Integer>> entrySet = map.entrySet();
        JSONArray jsonArray = new JSONArray();
        
        for (Entry<String, Integer> entry : entrySet)
        {
            JSONObject jsonObject = new JSONObject();
            jsonObject.put("depid",entry.getKey());
            jsonObject.put("score",String.valueOf(entry.getValue()));
            jsonArray.add(jsonObject);
        }
        System.out.println(jsonArray.toString());
    }
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式