在Java中合并两个JSON对象成一个对象

5

我有两个如下所示的json对象:

{"name":["Karbonn Smart A12 Star (Black & Silver)","Nokia 220 (Black)","Karbonn Smart A52 Plus (Black & Gold)","Karbonn Smart A12 Star (White & Gold)",.......]}
{"price":["Rs. 3,699","Rs. 2,599","Rs. 2,499","Rs. 3,699",..........]}

我想把两个对象合并,像下面这样。我尝试使用嵌套的 for each 循环,但没有成功。我不知道如何实现:

{"mobile":[{"name":"Karbonn Smart A12 Star (Black & Silver)","price":"Rs. 2,499"}]...........}

我的代码如下:

for(Element a:mobilename)
    {
    text= a.text();
    arr.add(text);
    obj1.put("name", arr);
    //a11.add(text);

}
   arr2.add(obj1);

    for(Element b:price)
    {
    text1=b.text();
    arr1.add(text1);

    obj.put("price", arr1);




     }
    arr2.add(obj1);
    arr2.add(obj);
    obj2.put("mobile", arr2);

你想通过Java或Javascript合并它们吗? - sol4me
谢谢sol4me,我想要与Java合并。 - Raj
3个回答

3

您可以通过 for 循环迭代,并在每次迭代中创建新的 JSONObject 并将其添加到集合中。最后将集合添加到 mergedObject 中。例如:

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import java.util.ArrayList;
import java.util.Collection;

public class Foo {
    public static void main(String[] args) throws JSONException {

        JSONObject object1 = new JSONObject("{\n" +
                "    \"name\": [\n" +
                "        \"Karbonn Smart A12 Star (Black & Silver)\",\n" +
                "        \"Nokia 220 (Black)\",\n" +
                "        \"Karbonn Smart A52 Plus (Black & Gold)\",\n" +
                "        \"Karbonn Smart A12 Star (White & Gold)\",\n" +
                "        \"Karbonn Smart A50s (Black)\",\n" +
                "        \"Karbonn Smart A52 Plus (White & Silver)\",\n" +
                "        \"Karbonn Titanium S2 Plus (White)\",\n" +
                "        \"Karbonn Smart A11 Star (Black)\",\n" +
                "        \"Karbonn Smart A11 Star (White)\"\n" +
                "    ]\n" +
                "}");

        JSONObject object2 = new JSONObject("{\n" +
                "    \"price\": [\n" +
                "        \"Rs. 3,699\",\n" +
                "        \"Rs. 2,599\",\n" +
                "        \"Rs. 2,499\",\n" +
                "        \"Rs. 3,699\",\n" +
                "        \"Rs. 2,699\",\n" +
                "        \"Rs. 2,499\",\n" +
                "        \"Rs. 4,999\",\n" +
                "        \"Rs. 4,399\",\n" +
                "        \"Rs. 4,499\"\n" +
                "    ]\n" +
                "}");


        JSONArray nameArray = object1.getJSONArray("name");
        JSONArray priceArray = object2.getJSONArray("price");

        JSONObject mergedObject = new JSONObject("{}");
        Collection<JSONObject> collection = new ArrayList<>();

        for (int i = 0; i < nameArray.length(); i++) {
            JSONObject obj = new JSONObject();
            obj.put("name", nameArray.getString(i));
            obj.put("price", priceArray.getString(i));
            collection.add(obj);
        }

        mergedObject.put("mobile", collection);
        System.out.println(mergedObject);
    }
}

输出:

{"mobile":[{"price":"Rs. 3,699","name":"Karbonn Smart A12 Star (Black & Silver)"},{"price":"Rs. 2,599","name":"Nokia 220 (Black)"},{"price":"Rs. 2,499","name":"Karbonn Smart A52 Plus (Black & Gold)"},{"price":"Rs. 3,699","name":"Karbonn Smart A12 Star (White & Gold)"},{"price":"Rs. 2,699","name":"Karbonn Smart A50s (Black)"},{"price":"Rs. 2,499","name":"Karbonn Smart A52 Plus (White & Silver)"},{"price":"Rs. 4,999","name":"Karbonn Titanium S2 Plus (White)"},{"price":"Rs. 4,399","name":"Karbonn Smart A11 Star (Black)"},{"price":"Rs. 4,499","name":"Karbonn Smart A11 Star (White)"}]}

谢谢您的回复sol4me,您的示例对于静态情况有效,但在动态情况下需要进行一些更改。通过您的示例,在进行更改后我能够实现这一点。谢谢。 - Raj

2

你可以在这里找到org.json JSON-java

import java.util.ArrayList;
import java.util.List;
import org.json.*;

public class JsonTest
{   
    public String mergeJson(String name, String price)
    {
        JSONObject nameJ= new JSONObject(name);
        JSONObject priceJ= new JSONObject(price);
        JSONObject mobileJ = new JSONObject();

        JSONArray names = nameJ.getJSONArray("name");
        JSONArray prices = priceJ.getJSONArray("price");
        JSONArray mobiles = new JSONArray();

        if(names.length() == prices.length())
        {
            for(int i=0;i<names.length();i++)
            {
                JSONObject mobile = new JSONObject();
                mobile.put("name", names.getString(i));
                mobile.put("price", prices.getString(i));
                mobiles.put(mobile);
            }
        }

        mobileJ.put("mobile", mobiles);

        return mobileJ.toString();          
    }

    public static void main(String[] args)
    {
        String name = "{'name':['Karbonn Smart A12 Star (Black & Silver)','Nokia 220 (Black)','Karbonn Smart A52 Plus (Black & Gold)','Karbonn Smart A12 Star (White & Gold)','Karbonn Smart A50s (Black)','Karbonn Smart A52 Plus (White & Silver)','Karbonn Titanium S2 Plus (White)','Karbonn Smart A11 Star (Black)','Karbonn Smart A11 Star (White)']}";
        String price = "{'price':['Rs. 3,699','Rs. 2,599','Rs. 2,499','Rs. 3,699','Rs. 2,699','Rs. 2,499','Rs. 4,999','Rs. 4,399','Rs. 4,499']}";

        JsonTest test = new JsonTest();
        System.out.println(test.mergeJson(name,price));
    }

}

感谢您的回复neohope,您的例子在静态情况下可以工作,但在动态情况下需要进行一些更改。使用您的示例并进行更改后,我已经能够实现所需功能。谢谢。 - Raj

0
合并 JsonObject(gson) -
    JsonObject data = new JsonObject();
    data = receivedJsoData.get("details").getAsJsonObject();

    JsonObject data2 = new JsonObject();
    data2 = receivedJsoData1.get("details").getAsJsonObject();

    JsonObject mergedData = new JsonObject();

    Set<Map.Entry<String, JsonElement>> entries = data1.entrySet();  //will return members of your object
    for (Map.Entry<String, JsonElement> entry : entries) {
        mergedData.add(entry.getKey(), entry.getValue());
    }
    Set<Map.Entry<String, JsonElement>> entries1 = data2.entrySet();  //will return members of your object
    for (Map.Entry<String, JsonElement> entry : entries1) {
        mergedData.add(entry.getKey(), entry.getValue());
    }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接