我试图将元素追加到数组。但是我不能确保该数组已经存在。因此,如果没有创建,则应创建它。
此示例有效:
来源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/