我正在嘗試使用 Jolt 轉換來轉換 JSON,在此處尋找一些輸入。我正在嘗試將所有級別的所有專案放入一個陣列中。
我的目標是獲得一個包含所有專案的陣列,而不知道我在 json 中有多少級別。
這是我的輸入和預期輸出:
如果我有 3 個級別:
輸入:
{
"id": 11,
"item": [
{
"id": "11_1",
"item": [
{
"id": "11_1_1",
"item": [
{
"id": "11_1_1_1"
}
]
},
{
"id": "11_1_2",
"item": [
{
"id": "11_1_2_1"
}
]
}
]
}
]
}
預期輸出:
[
{
"id": "11_1"
},
{
"id": "11_1_1"
},
{
"id": "11_1_1_1"
},
{
"id": "11_1_2"
},
{
"id": "11_1_2_1"
}
]
如果我有 2 個級別:
輸入:
{
"id": 11,
"item": [
{
"id": "11_1",
"item": [
{
"id": "11_1_1"
},
{
"id": "11_1_2"
}
]
}
]
}
預期輸出:
[
{
"id": "11_1"
},
{
"id": "11_1_1"
},
{
"id": "11_1_2"
}
]
我試著寫一些類似的東西:
[
{
"operation": "shift",
"spec": {
"item": { //to cover the second level
"*": "item"
}
}
},
{
"operation": "shift",
"spec": {
"item": {
"*": { //to cover the 3td level
"item": {
"*": "item"
}
}
}
}
}
]
結果是空的,如果我單獨運行每個轉換,我會在適用時得到結果你能幫我寫一個簡單的規范來做到這一點嗎?
uj5u.com熱心網友回復:
如果輸入在您的情況下最多具有 3 個級別,則使用此規范
[
{
"operation": "shift",
"spec": {
"item": {
"*": {
"id": "&",
"item": {
"*": {
"id": "&",
"item": {
"*": {
"id": "&"
}
}
}
}
}
}
}
},
{
"operation": "shift",
"spec": {
"id": {
"*": "[#1].&1"
}
}
}
]
為了處理這兩種情況,只使用這一種。如果還需要一個級別,則添加
,
"item": {
"*": {
"id": "&"
}
}
就在最里面
"id": "&"
編輯:如果您有一些其他屬性,而不是id最近在下面的輸入示例中評論的
{
"id": 11,
"item": [
{
"id": "11_1",
"quantity": 1,
"action": "add",
"state": "x",
"item": [
{
"id": "11_1_1",
"quantity": 2,
"action": "drop",
"state": "y"
},
{
"id": "11_1_2",
"quantity": 3,
"action": "modify",
"state": "z"
}
]
}
]
}
不僅僅是一點點修改就可以處理您的新案例:
[
{
"operation": "shift",
"spec": {
"item": {
"*": {
"*": "&",
"item": {
"*": {
"*": "&",
"item": {
"*": {
"*": "&"
}
}
}
}
}
}
}
},
{
"operation": "shift",
"spec": {
"*": {
"*": "[#1].&1"
}
}
}
]
這將產生:
[
{
"id": "11_1",
"quantity": 1,
"action": "add",
"state": "x"
},
{
"id": "11_1_1",
"quantity": 2,
"action": "drop",
"state": "y"
},
{
"id": "11_1_2",
"quantity": 3,
"action": "modify",
"state": "z"
}
]
uj5u.com熱心網友回復:
使用庫Josson解決無限級別的問題。
https://github.com/octomix/josson
反序列化
Josson josson = Josson.fromJsonString(
"{"
" \"id\": 11,"
" \"item\": ["
" {"
" \"id\": \"11_1\","
" \"quantity\": 1,"
" \"action\": \"add\","
" \"state\": \"x\","
" \"item\": ["
" {"
" \"id\": \"11_1_1\","
" \"quantity\": 2,"
" \"action\": \"drop\","
" \"state\": \"y\""
" },"
" {"
" \"id\": \"11_1_2\","
" \"quantity\": 3,"
" \"action\": \"modify\","
" \"state\": \"z\""
" }"
" ]"
" }"
" ]"
"}");
轉型
JsonNode node = josson.getNode("item.cumulateCollect(field(item:), item)");
System.out.println(node.toPrettyString());
陳述句從當前物件field(item:)中洗掉欄位。
的第二個引數表示下一個級別。在這種情況下是。itemcumulateCollect()item
輸出
[ {
"id" : "11_1",
"quantity" : 1,
"action" : "add",
"state" : "x"
}, {
"id" : "11_1_1",
"quantity" : 2,
"action" : "drop",
"state" : "y"
}, {
"id" : "11_1_2",
"quantity" : 3,
"action" : "modify",
"state" : "z"
} ]
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/519947.html
標籤:爪哇json树颠簸
