亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

將多個字符串json合并到一個java中

將多個字符串json合并到一個java中

12345678_0001 2023-10-19 21:31:40
我有多個 json 字符串,例如:JSON 1:{"a":"test1","b":"test2"}JSON 2:{"b":"test3","c":"test4"}我想要最終的 json 為:{"a":"test1","b":["test2","test3"],"c":"test4"}我怎樣才能在java中做到這一點?
查看完整描述

3 回答

?
慕哥9229398

TA貢獻1877條經驗 獲得超6個贊

您可以使用任何一種最流行的 JSON 庫來實現這一目標,以下示例演示了如何將多個 JSON 字符串合并為一個Jackson。


我使用Map<String, Object>(如jsonMap)作為合并的 JSON 字符串。如果所有給定 JSON 字符串中的鍵都相同,則jsonMap中的值將為String。否則,其值為List<String>。


示例代碼


List<String> jsonStrList = Arrays.asList("{\"a\":\"test1\",\"b\":\"test2\"}","{\"b\":\"test3\",\"c\":\"test4\"}");


ObjectMapper mapper = new ObjectMapper();

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

for (String jsonStr : jsonStrList) {

    Map<String, String> jsonContent = mapper.readValue(jsonStr, Map.class);

    jsonContent.forEach((k,v) -> {

        if (jsonMap.containsKey(k)) {

            if (jsonMap.get(k) instanceof String) {

                List<String> content = new ArrayList<>();

                content.add(jsonMap.get(k).toString());

                content.add(v);

                jsonMap.put(k, content);

            } else {

                jsonMap.put(k, ((ArrayList) jsonMap.get(k)).add(v));

            }

        } else {

            jsonMap.put(k, v);

        }

    });

}

System.out.println(jsonMap.toString());

System.out.println(new ObjectMapper().writeValueAsString(jsonMap).toString());

控制臺輸出


{a=test1, b=[test2], c=test4}

{"a":"test1","b":["test2","test3"],"c":"test4"}


查看完整回答
反對 回復 2023-10-19
?
Qyouu

TA貢獻1786條經驗 獲得超11個贊

您需要一個 API 或框架來在 java 中解析 JSON。然后,您必須迭代 JSON 字符串,將它們解析為鍵值對。一旦你有了它,我建議使用 Map 來按鍵存儲它們。這是一些偽代碼:


public class KeyValuePair {

    private String key = null;

    private String value = null;

    // todo create constructor with arguments

    // todo create getters and setters

}


private List<KeyValuePair> parseJSON(String json) {

    List<KeyValuePair> parsed = new ArrayList<>();

    // todo use the JSON API you chose to parse the json string into an ArrayList of KeyValuePair

    return parsed;

}


Map<String, List<String>> results = new HashMap<>();

List<String> jsonStrings = new ArrayList<>();

// todo read your JSON strings into jsonStrings

for (String jsonString : jsonStrings) {

    List<KeyValuePair> pairs = parseJSON(jsonString);

    for (KeyValuePair pair : pairs) {

        List<String> values = results.get(pair.getKey());

        if (values == null) {

            values = new ArrayList<>();

            results.put(pair.getKey(), values);

        }

        values.add(pair.getValue());

    }

}

// todo you'll have to loop through the map's keys and construct your result JSON


查看完整回答
反對 回復 2023-10-19
?
慕少森

TA貢獻2019條經驗 獲得超9個贊

您可以使用JSONObject 類來執行您需要的操作。據我了解,您目前有一些字符串。您可以使用構造函數為每個字符串創建一個 JSONObject:

JSONObject?jObject?=?new?JSONObject(String?str);

然后,您可以迭代 JSONObject,執行所有檢查并在新 JSONObject 中構造新 JSON。您有一些非常好的方法對您非常有幫助,但我認為 get 和 put 方法足以實現此合并。


查看完整回答
反對 回復 2023-10-19
  • 3 回答
  • 0 關注
  • 530 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號