【问题标题】:How to add in a specific index of com.google.gson.JsonArray?如何添加 com.google.gson.JsonArray 的特定索引?
【发布时间】:2017-10-29 11:43:48
【问题描述】:

com.google.gson.JsonArray 有 add 方法来追加元素。如果我想在特定索引处添加,该怎么做?

我尝试使用这种代码在第 0 个索引处添加元素。我正在寻找更好的东西,而无需实例化新的JsonArray

JsonArray newArray = new JsonArray();
newArray.add(new JsonPrimitive(3));
for (int i = 0; i < myArray.size(); i++) {
    newArray.add(myArray.get(i));
}

【问题讨论】:

  • 您能发布一个您希望创建的 json 示例吗?数组总是从 0 开始。也许你的意思是地图?
  • (例如初始 JSON 数组是这样的 [1,2,3] 现在我想在第 0 个索引处添加 0,添加后它将是 [0,1,2,3])

标签: java arrays json gson


【解决方案1】:

由于 JsonArray 没有插入方法,这意味着你必须自己制作。它在您选择的点插入数组中的单个项目。

public static JsonArray insert(int index, JsonElement val, JsonArray currentArray) {
    JsonArray newArray = new JsonArray();
    for (int i = 0; i < index; i++) {
        newArray.add(currentArray.get(i));
    }
    newArray.add(val);

    for (int i = index; i < currentArray.size(); i++) {
        newArray.add(currentArray.get(i));
    }
    return newArray;
}

所以使用这种方法,将新的项目 0 插入到现有数组 [1, 2, 3] 的位置 0 中:

insert(0, new JsonPrimitive(0), myArray);

在不改变原始数组的情况下,该方法将返回一个新数组 [0, 1, 2, 3]。希望对您有所帮助!

【讨论】:

  • 感谢您的回复。这是唯一的方法,你很好地将它放入一个方法中,我们可以重用它。每次我们都要创建一个新的 JsonArray。相反,void 返回类型应该是 JsonArray(可能是错字)。
  • @DebmalyaJash 哎呀,你是对的。我做了更正。干杯!
  • 感谢@Neil,用另一件事代替 JsonPrimitive val,如果我使用 JsonElement val,那么我也可以添加复杂类型的东西。
  • JsonArray oldArray = new JsonArray(); JsonObject arrayElement = new JsonObject(); arrayElement.add("评论", new JsonPrimitive ("玩 JsonArray")); JsonArray newArray = JSONUtil.insert(0, new JsonPrimitive(0), oldArray); newArray = JSONUtil.insert(1, arrayElement, newArray);
  • @DebmalyaJash 是的,当然你可以传递任何你想要的对象来代替 JsonPrimitive,只要它可以添加到 JsonArray 中。进行了更正。
【解决方案2】:

我认为您正在寻找类似的东西,您可以使用下面提到的方法替换特定索引处的现有 JsonElement。

JsonElement 集合(int 索引,JsonElement 元素) 将此数组中指定位置的元素替换为指定元素。

供参考:

https://static.javadoc.io/com.google.code.gson/gson/2.6.2/com/google/gson/JsonArray.html#set-int-com.google.gson.JsonElement-

【讨论】:

  • 感谢您的回答。我不想替换任何现有元素,我想在特定索引处添加一个元素(例如,初始 JSON 数组是这样的 [1,2,3] 现在我想在第 0 个索引处添加 0,添加后它将为 [0,1,2,3]
  • 我看不到任何支持它的内置功能,你必须手动合并两个 JsonArray,就像你已经拥有的那样。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-10-14
  • 1970-01-01
  • 1970-01-01
  • 2014-01-06
  • 1970-01-01
相关资源
最近更新 更多