4.1. add
4.1. add
"add" 操作会根据目标位置 (target location) 引用的内容, 执行以下功能之一:
-
如果目标位置指定的是数组索引, 则在数组的指定索引处插入一个新值.
-
如果目标位置指定的是尚不存在的对象成员, 则向对象添加一个新成员.
-
如果目标位置指定的是已经存在的对象成员, 则替换该成员的值.
操作对象 MUST 包含一个 "value" 成员, 其内容指定要添加的值.
例如:
{ "op": "add", "path": "/a/b/c", "value": [ "foo", "bar" ] }
应用该操作时, 目标位置 MUST 引用以下之一:
-
目标文档的根 - 此时指定的值会成为目标文档的全部内容.
-
要添加到现有对象的成员 - 此时提供的值会添加到该对象中指示的位置. 如果该成员已经存在, 则由指定的值替换它.
-
要添加到现有数组的元素 - 此时提供的值会添加到数组中指示的位置. 位于指定索引处或其后的任何元素都会向右移动一个位置. 指定的索引 MUST NOT 大于数组中的元素数量. 如果使用
"-"字符来索引数组末尾 (见 [RFC6901]), 其效果是将该值追加到数组.
由于此操作设计用于向现有对象和数组添加内容, 它的目标位置通常并不存在. 因而虽然会调用指针的错误处理算法, 但本规范为 "add" 指针定义的错误处理行为是忽略该错误, 并按指定方式添加该值.
但是, 对象本身或包含它的数组确实需要存在; 如果并非如此, 仍然是错误. 例如, 从以下文档开始, 目标位置为 "/a/b" 的 "add":
{ "a": { "foo": 1 } }
不是错误, 因为 "a" 存在, 且 "b" 将被添加到它的值中. 在以下文档中则是错误:
{ "q": { "bar": 2 } }
因为 "a" 不存在.