【问题标题】:Insert object to specific position in jsonarray将对象插入到jsonarray中的特定位置
【发布时间】:2016-04-15 13:15:06
【问题描述】:

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

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

我需要像这样在 jsonarray 中的第一个位置再插入一项-

jsonArray.put(1,"String5")

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

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

请推荐

【问题讨论】:

  • 其中一个答案是否解决了您的问题?如果是,那么请接受这个答案。

标签: java android arrays json


【解决方案1】:

看起来太老了,但你可以这样做:

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
  • 从服务器填充数据时为我工作
【解决方案2】:

试试这个:

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

【讨论】:

  • 这会将之前的第一个位置添加到最后一个位置。但是如果想要之前的第 1 位转移到第 2 位,之前的第 3 位到第 4 位等等......是否有任何优化的解决方案期望完整迭代?
  • @XYZ 使用JSONArray 类中提供的方法,我认为完全迭代是唯一的方法。
【解决方案3】:

Android JSONArray 并不是一种通用的数据结构,而是用来(反)序列化数据到 JSON 和从 JSON 输出数据。因此,您应该对 java.util.List 或其他东西执行所有添加/删除/变异操作,并且仅当您想通过电线将其发送到 JSONArray 时。

Java EE 7 也有一个 JsonArray 类,在他们的 API 描述中,他们非常清楚地表明他们希望阻止人们使用它来替代 java.util.listJsonArray 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.

另见this answer

【讨论】:

    【解决方案4】:

    像这样调用这个函数

    String changed_json_string=changeJson(jsonString,2,"hai")

      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"]}
    

    【讨论】:

      【解决方案5】:

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

      【讨论】:

        【解决方案6】:

        使用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 更通用,而不是将字符串作为值插入。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-10-27
          • 1970-01-01
          • 2020-08-07
          • 2013-09-30
          • 1970-01-01
          • 1970-01-01
          • 2012-11-09
          • 2013-10-10
          相关资源
          最近更新 更多