JSON补丁规范的解释
我对JSON补丁()的解释有一个问题 假设我有这样一个资源:JSON补丁规范的解释,json,patch,Json,Patch,我对JSON补丁()的解释有一个问题 假设我有这样一个资源: { "type": "assembly", "uri": "http://example.com/campSrv/Assembly/18", "name": "/sample", "description": "Hello, World Application", "created": "2013-03-27T16:15Z", ... } 该资源的定义是,它可以有一个名为“tags”的值,该值被定
{
"type": "assembly",
"uri": "http://example.com/campSrv/Assembly/18",
"name": "/sample",
"description": "Hello, World Application",
"created": "2013-03-27T16:15Z",
...
}
该资源的定义是,它可以有一个名为“tags”的值,该值被定义为字符串数组。但是,此资源当前没有标记,因此我的服务不会序列化不存在的数组
现在,假设我提交以下HTTP修补程序请求:
PATCH http://example.com/campSrv/Assembly/18 HTTP/1.1
Content-Type: application/json-patch
[
{ "op": "add", "path": "/tags/0", "value": "flobbit" }
]
这是创建“tags”数组并添加“flobbit”作为第一个/唯一的元素,还是我的服务器返回错误?据我所知 您的修补程序将导致错误,因为
标记
不存在,并且您无法添加到尚未存在的数组中
但是,对象本身或包含它的数组确实需要存在,但情况并非如此,这仍然是一个错误。对于
例如,一个目标位置为“/a/b”的“add”以以下内容开头 文件: {“a”:{“foo”:1} 不是错误,因为“a”存在,而“b”将添加到其
价值这是本文档中的一个错误: {“q”:{“bar”:2} 因为“a”不存在 但是,此修补程序将添加一个值为
“flobbit”
的标记
字符串
此修补程序将添加标记
数组,第一个元素是“fobbit”
{“op”:“add”,“path”:“/tags”,“value”:[“flobbit”]}
在上述情况下,如果tags数组已经存在,应该向其添加“flobbit”还是用提供的数组的内容替换整个数组?(与使用op“replace”相比,如果标签数组不存在,则应拒绝请求)。(如果替换整个数组感觉最自然,那么如果要添加多个值,则使用多个操作)我不太清楚。但是,我会将其解释为“将包含单个元素的数组添加到现有数组中”。因此,更新的标记将类似于,[“现有值”、“现有值2”、“等”,[“flobbit”]
@svidgen我认为这是错误的。RFC6902为“添加”操作指定了这一点:“如果目标位置指定了一个确实存在的对象成员,则该成员的值将被替换。”-然后,它将展示如何向现有数组添加内容:“要添加到现有数组的元素[…],如果使用“-”字符对数组的结尾进行索引(请参见[RFC6901]),其效果是将值附加到数组“因此,如果要将元素“flobbit”添加到现有数组中,则修补程序应类似于{“op”:“add”,“path”:“/tags/-”,“value”:“flobbit”}。
[
{ "op": "add", "path": "/tags", "value": "flobbit" }
]
[
{ "op": "add", "path": "/tags", "value": ["flobbit"] }
]