2016-09-20 13 views
0

は、私はこのようなJSONレスポンスがあります。Androidで2つのJSON配列をマージするにはどうすればよいですか?

[{"ProjectID":1,"ProjectName":"Test","UserID":[1,3,5,7],"RSID":[2,4,6,8]}] 

を、私はこのようにそれをマージする必要があります。

[{"ProjectID":1,"ProjectName":"Test","RS":[{"UserID":1,"RSID":2},{"UserID":3,"RSID":4},{"UserID":5,"RSID":6},{"UserID":7,"RSID":8} 
]}] 

を行うには、このことは可能ですか?

+1

以下試して受信したレスポンスJSONを解析し、お好みの新しいJSONを作成します。 –

+0

これを行う方法@MonishKamble –

答えて

0

これを行う直接的な方法はありません.jsonを読んでロジックを自分で実行するだけです。

あなたは使用することができます:JSON構造を確認するためにhttps://jsonformatter.curiousconcept.com/をので、これは次のようになります。

jsonArray = getJSONArray(response.toString()) // the full response; 
jsonObject = jsonArray.getJSONObject(0); 
String myProjectID = jsonObject.getString("ProjectID"); 
String myProjectName=jsonObject.getString("ProjectName"); 
    /* userIdArray = jsonObject .getJSONArray("UserID"); 
for (int i = 0; i < userIdArray .length(); i++) 
{ 
    //javaArray pushing values JSONObject jsonO = userIdArray .getJSONObject(i); 
} 

rsIdArray = jsonObject.getJSONArray("RSID"); 
for (int i = 0; i < rsIdArray .length(); i++) 
{ 

}*/ 

UPDATE

UserIDの数がちょうど1つのループを行うRSIDのと同じである場合。

userIdArray = jsonObject .getJSONArray("UserID"); 
rsIdArray = jsonObject.getJSONArray("RSID"); 

for (int i = 0; i < userIdArray .length(); i++) 
    { 
     //javaArray pushing values JSONObject jsonO = userIdArray .getJSONObject(i); 
//javaArray pushing values JSONObject jsonO = rsIdArray.getJSONObject(i); 
    } 




//new JSON 

JSONObject jsonNew = new JSONObject(); 
jsonNew .put("myProjectID ", myProjectID); 
jsonNew .put("myProjectName", myProjectName); 
JSONArray myNewArray = new JSONArray(); 
for (int i = 0; i < newArrayUser.length(); i++) 
{ 
JSONObject jobj= new JSONObject(); 
jobj.put("UserID", newArrayUser[i]); 
jobj.put("RSID", newArrayRSID[i]); 
myNewArray.put(jobj); 
} 
jsonNew.put(myNewArray); 

//all values 

私はそれをテストしていませんが、このようなことはすべきことです。コードの下

+0

すでに解析用にループを使用していますか?ループ内で2つのループを使用する必要がありますか?無限ループをいつか得ようとしています –

+0

動的に値を取得するには、 UserIDとRSIDの値は常に同じです。ただ1つのループを使用して両方の値を取得できます。しかし、なぜ私は無限ループになるのか理解できません。 – Aiapaec

+0

値は同じではありませんが、インデックスは同じになります –

2
i tried to solve your query in plain javascript. hope it helps you. 

http://codepen.io/halimmln/pen/GjjLEW

は、Java使用して同じタスクを実行することです:

JSONParser parser = new JSONParser(); 
    String oldJSON = "[{\"ProjectID\":1,\"ProjectName\":\"Test\",\"UserID\":[1,3,5,7],\"RSID\":[2,4,6,8]}]"; 

    JSONObject newJSON = new JSONObject(); 
    Object obj = parser.parse(oldJSON); 
    JSONArray mainArray = (JSONArray) obj; 
    JSONObject objects = (JSONObject) mainArray.get(0); 

    newJSON.put("ProjectID", objects.get("ProjectID")); 
    newJSON.put("ProjectName", objects.get("ProjectName")); 

    JSONArray userId = (JSONArray) objects.get("UserID"); 
    JSONArray rsid = (JSONArray) objects.get("RSID"); 
    JSONArray newArr = new JSONArray(); 

    for (int i = 0; i < userId.size(); i++) { 
     JSONObject combine = new JSONObject(); 
     System.out.println("inside array" + userId.get(i)); 
     combine.put("UserID", userId.get(i)); 
     combine.put("RSID", rsid.get(i)); 
     newArr.add(combine); 
    } 
    newJSON.put("RS", newArr); 
    System.out.println("json" + newJSON.toJSONString()); 
+0

1つの質問:どうすればAndroidとJavaで、それを崇拝して使うべきですか? –

0

では、既存のJSONオブジェクトを再構築しているとして、JSONをマージする直接的な方法はありません。 jsonを処理し、以下のように値を設定します。

var myObj = {"ProjectID":1,"ProjectName":"Test","UserID":[1,3,5,7],"RSID":[2,4,6,8]} 
    var myArray = []; 
    var RS = {}; 
     var rsuserObj ={}; 
     for(var key in myObj.UserID){ 
      rsuserObj["userID"] = myObj.UserID[key]; 
      rsuserObj["RSID"] = myObj.RSID[key]; 
      myArray.push(rsuserObj); 

     } 

    var updatedObj = {"ProjectID":1,"ProjectName":"Test", "RS": myArray}; 

    console.log(JSON.stringify(updatedObj)); 
0

コード

try { 
     String json1 = "[{\"ProjectID\":1,\"ProjectName\":\"Test\",\"UserID\":[1,3,5,7],\"RSID\":[2,4,6,8]}]"; 
     JSONArray jsonArray1 = new JSONArray(json1); 

     JSONObject jsonObject = jsonArray1.optJSONObject(0); 
     String key1 = "UserID"; 
     String key2 = "RSID"; 
     String keyFinal = "RS"; 
     JSONArray userIDArray = jsonObject.optJSONArray("UserID"); 
     JSONArray rsIDArray = jsonObject.optJSONArray(key2); 
     jsonObject.remove(key1); 
     jsonObject.remove(key2); 

     int index = 0; 

     JSONArray rsFinalArray = new JSONArray(); 

     if (userIDArray.length() > rsIDArray.length()) { 
      index = userIDArray.length(); 
     } else { 
      index = rsIDArray.length(); 
     } 


     for (int i = 0; i < index; i++) { 
      JSONObject rsObject = new JSONObject(); 
      rsObject.accumulate(key1, userIDArray.opt(i)); 
      rsObject.accumulate(key2, rsIDArray.opt(i)); 
      rsFinalArray.put(rsObject); 
     } 

     jsonObject.accumulate(keyFinal, rsFinalArray); 
     JSONArray jsonArrayFinal = new JSONArray(); 
     jsonArrayFinal.put(jsonObject); 
     Log.v("TAG", "result :" + jsonArrayFinal.toString()); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
関連する問題