9

我正在尝试将元素附加到数组中。但我不能确保数组已经存在。因此,如果没有,则应创建它。

这个例子有效:

源json:

{
  "data": []
}

补丁文档:

[{
  "op":"add",
  "path":"/data/-",
  "value": "foo"
}]

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

源json:

{}

我尝试了一个解决方案,首先添加一个空数组然后追加,但这总是会清除现有条目:

[{
  "op":"add",
  "path":"/scores",
  "value": []
}, 
{
  "op":"add",
  "path":"/scores/-",
  "value": {
    "time":1512545873
    }
}]

我错过了什么或者规范中没有解决方案吗?

4

2 回答 2

4

很高兴看到您使用 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>

于 2018-01-30T10:42:45.467 回答
-2

在 Openshift,您可以使用以下命令执行此操作:

oc patch dc/NAME_OF_DC --type=json --patch '
[
  { 
    "op": "add",
    "path": "/spec/template/spec/containers/0/env/-",
    "value": {
      "name": "KUBERNETES_NAMESPACE",
      "valueFrom": {
          "fieldRef": {
              "fieldPath": "metadata.namespace"
          }
      }
    }
  }
]
'

更多你可以在这里找到

于 2019-10-23T20:46:41.763 回答