Skip to main content

4.1. add (添加)

4.1. add (添加)

"add" 操作根据目标位置引用的内容执行以下功能之一:

  • 如果目标位置指定一个数组索引, 则在指定索引处将新值插入数组。

  • 如果目标位置指定一个尚不存在的对象成员, 则向对象添加新成员。

  • 如果目标位置指定一个已存在的对象成员, 则替换该成员的值。

操作对象必须包含一个 "value" 成员, 其内容指定要添加的值。

例如:

{ "op": "add", "path": "/a/b/c", "value": [ "foo", "bar" ] }

当操作被应用时, 目标位置必须引用以下之一:

  • 目标文档的根 - 此时指定的值成为目标文档的全部内容。

  • 要添加到现有对象的成员 - 此时提供的值在指定位置被添加到该对象。如果成员已存在, 则被指定的值替换。

  • 要添加到现有数组的元素 - 此时提供的值在指定位置被添加到数组。位于指定索引或其上方的任何元素都向右移动一个位置。指定的索引不得大于数组中的元素数量。如果使用 "-" 字符对数组末尾进行索引 (参见 [RFC6901]), 则具有将值追加到数组的效果。

因为此操作旨在添加到现有对象和数组, 所以其目标位置通常不存在。尽管因此会调用指针的错误处理算法, 但本规范定义 "add" 指针的错误处理行为是忽略该错误并按指定添加值。

但是, 对象本身或包含它的数组确实需要存在, 如果不是这种情况, 则仍然是错误。例如, 从以下文档开始, 目标位置为 "/a/b""add":

{ "a": { "foo": 1 } }

不是错误, 因为 "a" 存在, 并且 "b" 将被添加到其值。在以下文档中这是错误:

{ "q": { "bar": 2 } }

因为 "a" 不存在。