解释JSON补丁规范

时间:2013-04-10 15:45:37

标签: json patch

我对JSON补丁(RFC 6902)的解释有疑问。

假设我有一个看起来像这样的资源:

{
   "type": "assembly",
   "uri": "http://example.com/campSrv/Assembly/18",
   "name": "/sample",
   "description": "Hello, World Application",
   "created": "2013-03-27T16:15Z",
   ...
}

该资源的定义表明它可以有一个名为“tags”的值,它被定义为一个字符串数组。但是,此资源当前没有标记,因此我的服务不会序列化不存在的数组。

现在假设我提交了以下HTTP PATCH请求:

PATCH http://example.com/campSrv/Assembly/18 HTTP/1.1
Content-Type: application/json-patch

[
  { "op": "add", "path": "/tags/0", "value": "flobbit" }
]

这应该创建'tags'数组并添加'flobbit'作为第一个/唯一的元素,还是我的服务器应该返回错误?

1 个答案:

答案 0 :(得分:3)

根据我的理解......

您的补丁会导致错误,因为tags不存在,并且您无法添加到尚不存在的数组。

  

RFC 6902 4.1

     

...

     

但是,对象本身或包含它的数组确实需要   存在,但事实并非如此。对于
  例如,一个“添加”,目标位置为“/ a / b”,以此开头   文件:

     

{“a”:{“foo”:1}}

     

不是错误,因为“a”存在,并且“b”将被添加到其中   值。这是一个错误:

     

{“q”:{“bar”:2}}

     

因为“a”不存在。

但是,此修补程序会添加tags字符串,其值为"flobbit"

[
  { "op": "add", "path": "/tags", "value": "flobbit" }
]

此修补程序将添加tags数组,第一个元素为"fobbit"

[
  { "op": "add", "path": "/tags", "value": ["flobbit"] }
]