[英]Transform complex Json array using Jolt
當調用外部 API 時,我收到一個復雜的 json 結構,同樣我需要根據我們的需要將其轉換為一個簡單的 json。 我發現 jolt 具有轉換 json 的能力,但無法提出 jolt 規范。
我的輸入 Json 數組——
{
"attribute": [
"teamalloc",
"prodAlloc"
],
"item": {
"id": "abcde",
"name": "Champak Kumar",
"allocDetails": {
"updatedAt": "2020-08-10T14:26:48-07:00",
"token": 1134,
"items": [
{
"allocation": 0.2,
"team": {
"id": 90,
"name": "Some Team Name 1",
"createdAt": "2010-01-19T10:52:52-07:00"
}
},
{
"allocation": 0.9,
"team": {
"id": 80,
"name": "Some Team Name 2",
"createdAt": "2010-01-19T10:52:52-07:00",
"product": {
"id": 20,
"name": "Some Product Name 1",
"otherDetails": {
"key": "Id",
"value": "GEC"
}
}
}
},
{
"allocation": 0.1,
"team": {
"id": 10,
"name": "Some Team Name 3",
"createdAt": "2010-01-19T10:52:52-07:00",
"product": {
"id": 22,
"name": "Some Product Name 2",
"otherDetails": {
"key": "Id1",
"value": "GEC1"
}
}
}
}
]
}
}
}
我的輸出 Json 結構應該是這樣的——
{
"name": "Champak Kumar",
"allocDetails": [
{
"allocation": 0.2,
"team": {
"id": 90,
"name": "Some Team Name 1"
}
},
{
"allocation": 0.9,
"team": {
"id": 80,
"name": "Some Team Name 2",
"product": {
"id": 20,
"name": "Some Product Name 1"
}
}
},
{
"allocation": 0.1,
"team": {
"id": 10,
"name": "Some Team Name 3",
"product": {
"id": 22,
"name": "Some Product Name 2"
}
}
}
]
}
我嘗試了多個 jolt 規范,但無法提出所需的輸出。 理想的震動規格應該是什么?
這個規范應該使用移位操作應該工作:
[
{
"operation": "shift",
"spec": {
"item": {
"name": "name",
"allocDetails": {
"items": {
"*": {
"allocation": "allocDetails[&1].allocation",
"team": {
"id": "allocDetails[&2].team.id",
"name": "allocDetails[&2].team.name",
"product": "allocDetails[&2].team.product"
}
}
}
}
}
}
}
]
編輯#1:
解釋:移位操作規范定義了我們要將輸入 json 中的值放在結果 json 中的什么位置。
["item"]["name"]
將落在輸出 JSON 中的["name"]
鍵下。 "items": {
"*": {
...
}
}
部分說:“對於 'items' 鍵下的數組的每個元素,請執行...
”
"&X"
讓我們引用 LHS 上方X
級的鍵(有問題的鍵)。 例如:假設我們有 items 數組的第 57 個元素(從 0 開始計數):...
"name": "allocDetails[&2].team.name"
...
說:“將找到的值放在"name"
鍵下(即在item["items"][56]["team"]["name"]
中的數組的第 57 個元素中放置在"allocDetails"
鍵下.
'*' 匹配第 57 個元素。 '&2' 讓我們發現我們現在正在處理的數組的元素是第 57 個元素。
查看shift operation javadocs
,尤其是"&"
和"*"
通配符
編輯 #2:考慮otherDetails
評論:您也可以這樣處理它:
...
"team": {
"id": "allocDetails[&2].team.id",
"name": "allocDetails[&2].team.name",
"product": {
"otherDetails": null,
"*": "allocDetails[&3].team.product.&"
}
}
...
以上:將所有products
的部分鍵(由"*"
匹配)放到具有相同名稱( "&"
)的鍵中,放在"allocDetails[&3].team.product"
輸出 json 的鍵中...除了"otherDetails"
鍵。
工作顛簸規格——
{
"operation": "shift",
"spec": {
"item": {
"name": "name",
"allocDetails": {
"items": {
"*": {
"allocation": "allocDetails[&1].allocation",
"team": {
"id": "allocDetails[&2].team.id",
"name": "allocDetails[&2].team.name",
"product": {
"id": "allocDetails[&3].team.product.id",
"name": "allocDetails[&3].team.product.name"
}
}
}
}
}
}
}
}
]```
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.