簡體   English   中英

如何在Android中合並兩個JSON數組?

[英]How to merge two JSON arrays in Android?

我有這樣的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}
]}]

這可能嗎?

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());

沒有直接的方法可以做到這一點,您只需要閱讀json並自己執行邏輯即可。

您可以使用: https : //jsonformatter.curiousconcept.com/來檢查JSON結構,因此它將是:

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++)
{

}*/

更新

如果UserID的數量與RSID相同,則執行1次循環。

 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

我沒有測試過,但是這樣的事情應該可以解決。

在重組現有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));

嘗試下面的代碼

 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();
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM