根据要求自定义Json补丁

时间:2019-01-07 19:06:36

标签: java json rest patch json-patch

我正在使用Json Patch库来执行使用REST的补丁操作。现在我有了下面的json文档:

{
    "id":1,
    "ref":{"r1":1,"r2":2},  // header level
    "child":[
                {
                    "childId":1,
                    "ref":{"cc1":1,"cc2":2}   // line level
                },
                {
                    "childId":2,
                    "ref":{"cc3":2}    // line level
                }
            ]
}

现在,根据Json Patch doc,在标头级别,我们可以使用以下路径/ref/r1更新 ref r1

现在,我正在尝试在子引用级别上执行操作。由于child是一个数组,因此我可以使用路径/child/0/ref/cc1。但是,从 path 可以看出,在前面的情况下,我还必须指定索引为0。

现在,对于API使用者来说,要求他们提供数组的索引变得很困难。那么有什么方法可以自定义json补丁,以便我们可以绕过索引要求,或者还有什么其他方法可以处理这种情况?

1 个答案:

答案 0 :(得分:0)

我不是JSON-Patch的专家,我只是读过它。 据我了解,最重要的部分是让API使用者在不给他们索引的情况下访问您的JSON,

我认为哈希图在这种情况下会有所帮助,方法是获取每个元素的索引并为其生成特定的ID,然后可以将其保存在哈希图列表中,每个索引都有其自己的ID

示例:

HashMap<String, String> elementIndex = new HashMap<[UUID], [elementIndex]>(); 您可以选择所需的任何数据类型,而不必选择String

在这种情况下,哪个索引号无关紧要,这全都与固定的UUID有关。 因此,在这种情况下,该路径也将是/child/{UUID}/ref/cc1,当您收到该路径时,您可以访问 UUID 并将其替换为其elementIndex,现在您有了正确的路径,即{{1} }

,如果您想知道如何将动态值传递给JSON对象,可以通过多种方式进行, 这个问题会有所帮助:

How to pass dynamic value to a JSON String,-将JSONObject转换为String之前-

注意:不必将其替换为index,您可以按照自己喜欢的方式进行操作。

如果有人对JSON补丁有更多了解,我相信会有更好的答案。 我希望这会有所帮助,或者至少会让您了解如何解决它。