首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否可以使用Vert.xJSON指针通过指针替换JSON数组中的项?

是否可以使用Vert.xJSON指针通过指针替换JSON数组中的项?
EN

Stack Overflow用户
提问于 2022-02-03 13:15:40
回答 1查看 463关注 0票数 0

在使用Vert.x时,为了操作JSON,我使用了一个JSON指针。最近,我们发现必须对JSON数组进行同样的处理。

这是我试过的示例代码。

代码语言:javascript
复制
String jsonInput = "{\"string\":\"string\",\"json\":{\"items\":[\"item-1\",\"item-2\",\"item-3\"]}}";
JsonObject json = new JsonObject(jsonInput);
JsonPointer pointer = JsonPointer.from("/json/items/0");
System.out.println(pointer.writeJson(json,"new item"));

将此作为输入

代码语言:javascript
复制
{
    "string": "string",
    "json": {
        "items": [
            "item-1",
            "item-2",
            "item-3"
        ]
    }
}

指向item-1的指针将是/json/items/0。当我对Vert.x中的JsonPointer使用相同的方法而不是替换现有的项时,它最终会添加另一个元素,而不是在索引0处写入,如下所示

代码语言:javascript
复制
{
    "string": "string",
    "json": {
        "items": [
            "<newly-written-item>"
            "item-1",
            "item-2",
            "item-3"
        ]
    }
}

是否可以覆盖现有值而不是在索引处添加?

EN

回答 1

Stack Overflow用户

发布于 2022-02-03 14:27:34

我认为writeJson()是不可能的,因为它总是在给定的索引处添加新元素。在vertx的存储库实现中,您可以看到vertx总是使用以下方法编写数组元素,而数组元素只能添加一个新元素:

代码语言:javascript
复制
public boolean writeArrayElement(Object value, int i, Object el) {
    if (isArray(value)) {
      try {
        ((JsonArray)value).getList().add(i, el);
        return true;
      } catch (IndexOutOfBoundsException e) {
        return false;
      }
    } else return false;
  }

对于JsonObjects,vertx使用以下方法,它将替换现有值:

代码语言:javascript
复制
  @Override
  public boolean writeObjectParameter(Object value, String key, Object el) {
    if (isObject(value)) {
      ((JsonObject)value).put(key, el);
      return true;
    } else return false;
  }

一个可能的解决办法是查询JsonArray并手动替换数组元素,如下所示:

代码语言:javascript
复制
String jsonInput = "{\"string\":\"string\",\"json\":{\"items\":[\"items-1\",\"item-2\",\"item-3\"]}}";
JsonObject json = new JsonObject(jsonInput);
JsonPointer pointer = JsonPointer.from("/json/items");
JsonArray jsonArray = (JsonArray) pointer.queryJson(json);
jsonArray.remove(0);
jsonArray.add(0, "new item");

System.out.println(json);

输出:

代码语言:javascript
复制
{"string":"string","json":{"items":["new item","item-2","item-3"]}}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70971970

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档