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" 不存在。