【问题标题】:Customize Json Patch as per the requiremnent根据要求自定义 Json 补丁
【发布时间】:2019-06-02 11:14:20
【问题描述】:

我正在使用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 ref 行级别上执行操作。由于 child 是一个数组,我可以使用路径/child/0/ref/cc1。但从 path 可以看出,我必须指定索引,在前一种情况下也为 0。

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

【问题讨论】:

    标签: java json rest patch json-patch


    【解决方案1】:

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

    我认为 hashmap 在这种情况下会有所帮助,通过获取每个元素的索引并为其生成特定的 ID,然后您可以将它们保存在 hashmap 列表 , 每个索引都有自己的 ID

    一个样本:

    HashMap<String, String> elementIndex = new HashMap<[UUID], [elementIndex]>(); 你可以选择任何你想要的数据类型,不是必须的字符串

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

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

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

    注意:不必用索引代替,你可以按照自己喜欢的方式进行。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-24
      相关资源
      最近更新 更多