颠簸转换JSON规范

时间:2020-08-25 14:52:19

标签: java jolt

我需要在Input JSON下面进行转换以输出JSON,并且不确定如何编写规范。需要重新定位一个字段(“ homePage”)作为根元素。任何帮助或建议,将不胜感激。

输入JSON:

[{
    "uuid": "cac40601-ffc9-4fd0-c5a1-772ac65f0587",
    "pageId": 123456,    
    "page": {
      "indexable": true,
      "rootLevel": false,
      "homePage": false      
    }
}]

输出JSON:

[{
    "uuid": "cac40601-ffc9-4fd0-c5a1-772ac65f0587",
    "pageId": 123456,
    "homePage": false,  
    "page": {
      "indexable": true,
      "rootLevel": false           
    }
}]

1 个答案:

答案 0 :(得分:3)

此Jolt Spec应该适合您。经过https://jolt-demo.appspot.com/

测试
[
  {
    "operation": "shift",
    "spec": {
      "*": {
        "uuid": "[&1].uuid",
        "pageId": "[&1].pageId",
        "page": {
          "indexable": "[&2].page.indexable",
          "rootLevel": "[&2].page.rootLevel",
          "homePage": "[&2].homePage"
        }
      }
    }
  }
]

输入:

{
  "uuid" : "cac40601-ffc9-4fd0-c5a1-772ac65f0587",
  "pageId" : 123456,
  "page" : {
    "indexable" : true,
    "rootLevel" : false
  },
  "homePage" : false
}

输出:

[ {
  "uuid" : "cac40601-ffc9-4fd0-c5a1-772ac65f0587",
  "pageId" : 123456,
  "page" : {
    "indexable" : true,
    "rootLevel" : false
  },
  "homePage" : false
} ]

说明:

javadoc

&路径查找

当Shiftr处理数据并遵循规范时,它会维护描述其行走路径的数据结构。 &通配符可以以0大,向上的方式从该路径访问数据。 示例:

{
   "foo" : {
       "bar": {
         "baz":  // &0 = baz, &1 = bar, &2 = foo
      }
   }
}

下一步:如何将输出对象包装到数组中? 可以在this post中找到一个很好的例子。

所以,在我们的例子中:

  • "[&1].uuid"说:

uuid值放在数组内的对象中。数组的索引由&1通配符指示。对于uuid,它将是数组的索引,其中使用uuid键的对象将放置在原始json中。

  • 接下来,[&2][&1]类似。但是,查看"indexable"键,它在输入json中更深一层。这就是为什么我们使用[&1]而不是[&2]的原因(再次看一下文档中的foo-bar示例)。
相关问题