将对象插入jsonarray中的特定位置

时间:2016-01-11 09:28:00

标签: java android arrays json

我想在JSonArray中将对象添加到特定位置。 我的当前JsonArray看起来像这样

{
    "imgs": [
        "String1",
        "String2",
        "String3",
        "String4"
    ]
}

我需要在第一个位置插入jsonarray中的一个项目,如下所示 -

jsonArray.put(1,"String5")

这是在第一个位置替换项目 但我需要以下结果

{
    "imgs": [
        "String1",
        "String5",
        "String2",
        "String3",
        "String4"
    ]
}

请建议

6 个答案:

答案 0 :(得分:10)

看起来太旧但你可以这样做:

public void addToPos(int pos, JSONObject jsonObj, JSONArray jsonArr){
   for (int i = jsonArr.length(); i > pos; i--){
      jsonArr.put(i, jsonArr.get(i-1));
   }
   jsonArr.put(pos, jsonObj);
}

答案 1 :(得分:3)

试试这个:

String myString = jsonArray.getString(1);
jsonArray.put(1,"String5");
jsonArray.put(myString);

答案 2 :(得分:2)

Android JSONArray不是通用数据结构,而是(de)将数据序列化到JSON和从JSON序列化数据。因此,您应该对java.util.List或其他内容执行所有添加/删除/变异操作,并且只有当您希望通过线路将其发送转换为JSONArray时才会执行。

Java EE 7还有一个JsonArray类,在他们的API描述中,他们非常明确地表示他们希望阻止人们将其用作java.util.list的替换JsonArray instances are list objects that provide read-only access to the values in the JSON array. Any attempt to modify the list, whether directly or using its collection views, results in an UnsupportedOperationException. < / p>

另见this answer

答案 3 :(得分:1)

像这样调用这个函数

String changed_json_string = changeJson(jsonString,2,&#34; hai&#34;)

  public String changeJson(String json,int index,String add_string){

            try {
                JSONObject job=new JSONObject(json);
                JSONArray jsonArray=job.getJSONArray("imgs");

                ArrayList<String> arrayList=new ArrayList<>();
                for (int i=0;i<jsonArray.length();i++){
                    String abc= (String) jsonArray.get(i);
                    arrayList.add(abc);


                 }


                arrayList.add(index,add_string);

                JSONObject a=new JSONObject();
                JSONArray jar=new JSONArray();


                for (String str:
                arrayList) {
                    jar.put(str);

                }
                a.put("imgs",jar);

               return a.toString();






            } catch (JSONException e) {
                e.printStackTrace();

            }

            return "";
        }

输出

{"imgs":["String1","String2","hai","String3","String4"]}

答案 4 :(得分:1)

使用数组移位逻辑或使用新插入的元素创建新json数组的副本并插入到原始json ojbect中。

答案 5 :(得分:0)

使用JsonArrayBuilder对象。

private JsonArray insertAt(int index, String value, JsonArray origArray) {

    JsonArrayBuilder resultBuilder = Json.createBuilderFactory(null).createArrayBuilder();

    // Insert elements before the position
    for (JsonValue elemValue : origArray.subList(0, index)) {
        resultBuilder.add(elemValue);
    }

    // Insert your element
    resultBuilder.add(value);

    // Insert the rest of elements.
    for (JsonValue elemValue : origArray.subList(index, origArray.size())) {
        resultBuilder.add(elemValue);
    }

    return resultBuilder.build();
}

请注意,此处未进行参数检查。另外,除了将字符串作为值插入之外,还可以使用JsonValue使其更通用。