引用http://tools.ietf.org/html/rfc6902#appendix-A.14:
A.14。 〜逃避订购
示例目标JSON文档:
{ "/": 9, "~1": 10 }
JSON补丁文档:
[ {"op": "test", "path": "/~01", "value": 10} ]
生成的JSON文档:
{ "/": 9, "~1": 10 }
我正在撰写此RFC的实现,而且我坚持这一点。这是什么尝试实现的,它应该如何运作?
假设第一部分的答案是"允许引用包含/ s的json密钥名称,"你会怎么做?
答案 0 :(得分:1)
我认为RFC中提供的示例并不是最精确的考虑因素,尤其是它试图仅通过示例来记录某个功能,这种情况最多也是模糊的 - 没有提供任何类型的评论。
您可能对以下文件中提供的口译感兴趣:
这些看似非常相似,我认为这是由于Rackspace和OpenStack之间关系的本质:
OpenStack于2010年开始作为Rackspace Hosting和NASA(...)的联合项目
它实际上提供了一些有用的细节,包括它接受的语法和引入这些令牌的理由,而不是RFC本身。
编辑:似乎JSON指针有单独的RFC 6901,可用here,上面的OpenStack和Rackspace规范与之一致。
答案 1 :(得分:1)
~0
扩展为~
,因此/~01
扩展为/~1
我猜测他们意味着你不应该"双重扩展"因此,展开的/~1
不应再次展开为//
,因此不得与文档"/"
键匹配(如果您展开双倍会发生这种情况)。您也不应该在源文档中扩展文字,因此"~1"
键实际上与扩展的"/"
不同。但我重复这是我的猜测关于这个例子的意图,真实意图可能会有所不同。
该示例确实非常糟糕,特别是因为它使用"test"
操作并且没有指定该操作的结果。其他例子如A.15的下一个例子至少说它的测试操作必须失败,A.14不会告诉你操作是否应该成功。我假设它们意味着操作应该成功,因此暗示/~01
应该与"~1"
键匹配。这可能就是那个例子。
如果我要编写一个实现,我可能不会过多担心这个例子,只是看看其他实现是做什么的 - 检查我是否与它们兼容。寻找其他项目的测试套件也是一个好主意,例如我在http://jsonpatch.com/ https://github.com/json-patch/json-patch-tests找到了一个<{3}}
答案 2 :(得分:0)
~
字符是JSON指针中的关键字。因此,我们需要将其“编码”为~0
。引用jsonpatch.com,
如果您需要用键名中的〜或/来引用键,则必须分别对〜0和〜1进行转义。例如,要从{“ foo / bar〜”:“ baz”}获取“ baz”,您可以使用指针/ foo〜1bar〜0
基本上,
[
{"op": "test", "path": "/~01", "value": 10}
]
解码后的收益率
[
{"op": "test", "path": "/~1", "value": 10}
]