json-patch - jsonpatch将元素添加到数组并创建(如果不存在)

标签 json-patch

我试图将元素追加到数组。但是我不能确保该数组已经存在。因此,如果没有创建,则应创建它。

此示例有效:

来源json:

{
  "data": []
}

补丁文件:
[{
  "op":"add",
  "path":"/data/-",
  "value": "foo"
}]

但是在这种情况下,它不会追加任何内容:

来源json:
{}

我通过先添加一个空数组然后追加来尝试解决方案,但这将始终清除现有条目:
[{
  "op":"add",
  "path":"/scores",
  "value": []
}, 
{
  "op":"add",
  "path":"/scores/-",
  "value": {
    "time":1512545873
    }
}]

我是否错过了某些东西,或者在规范中没有解决方案?

最佳答案

很高兴看到您使用fast-json-patch。我维护这个库。

我会说您无法通过纯JSON补丁实现这一目标。您的JS需要一些逻辑。如下所示:

var doc = {};

var patch = [{
  "op": "add",
  "path": "/scores/-",
  "value": {
    "time": 456
  }
}];

var arr = jsonpatch.getValueByPointer(doc, '/scores');
if (!arr) {
  jsonpatch.applyOperation(doc, {
    "op": "add",
    "path": "/scores",
    "value": []
  });
}

var out = jsonpatch.applyPatch(doc, patch).newDocument;
pre.innerHTML = JSON.stringify(out);
<script src="https://cdnjs.cloudflare.com/ajax/libs/fast-json-patch/2.0.6/fast-json-patch.min.js"></script>

<pre id="pre"></pre>

关于json-patch - jsonpatch将元素添加到数组并创建(如果不存在),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47670366/

相关文章:

java - 在 Spring Boot Data Rest 应用程序中保护 JSON-PATCH 路径

asp.net-core - 尝试从 Blazor Wasm 调用 AspNetCore Restful API 时出现 'TypeError: Failed to fetch' 错误

json - RethinkDB 在根据 rfc6902 部分更新 json 文档时有用吗?

c# - 通过对象 ID 更新数组对象的 jsonpatch 路径

java - 如何仅更新可能已为空的某些字段(使用 JSON 补丁)

json - JSON 指针中波浪号的用途

asp.net-core - 迁移到 .Net Core 3 后 JsonPatchDocument 为空

json - 如何在redis队列中存储json-patch操作并保证其一致性?

c# - 如何使用 Hot Chocolate 和 EF Core 创建 GraphQL 部分更新