2014-12-13 1 views
4

У меня есть два объекта JSON, как показано ниже:слияния двух JSon объектов в единый объект в Java

{"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",..........]} 

Я хотел бы объединить обе объекты, как показано ниже, я попытался с помощью вложенной для каждого цикла она не работала I я не зная процедуру для достижения этой цели:

{"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); 
+0

Вы хотите, чтобы объединить их с помощью Java или JavaScript? – sol4me

+0

спасибо sol4me, я хочу слиться с java. – 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)); 
    } 

} 
+0

Спасибо за ваш ответ neohope, ваш пример работает статически, но динамически некоторые изменения нужно сделать, с вашим примером после внесения изменений я могу это сделать. Спасибо – Raj

+0

@Raj Рад помочь :) – neohope

3

Вы можете перемещаться через цикл и в каждой итерации создать новую 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); 
    } 
} 

Ouput:

{"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)"}]} 
+0

Спасибо за ваш ответ sol4me, ваш пример работает на статически, но динамично, некоторые изменения нужно сделать, с вашим примером после внесения изменений я могу это сделать. Спасибо – Raj

+0

У меня нет достаточной репутации для повышения рейтинга – Raj

+0

@Raj Нет проблем – sol4me

Смежные вопросы