Скажем, у меня есть следующий JSON:
{
"doc": {
"left_margin": 2,
"right_margin": 2,
"receipt": {
"emptyLine": "",
"id": 133,
"name": "depositOnline",
"line": [{
"dataItem": [{
"ref": "depositAmount",
"label": "receipt.deposit.amountLabel"
}, {
"ref": "currency"
}]
}, {
"dataItem": [{
"ref": "depositCustomerName",
"label": "transfer.confirm.name"
}, {
"ref": "currency"
}]
}],
"dataItem": [{
"text": "receipt.deposit.explanationDone"
}, {
"ref": "depositNumber",
"label": "receipt.deposit.numberLabel.deposit"
}, {
"ref": "depositResolve"
}],
"portion": [{
"id": 1
}, {
"id": 4
}, {
"id": 5
}, {
"id": 2
}]
},
"portion": [{
"id": 1,
"lineFiller": {
"char": "-"
},
"align": "center",
"name": "header",
"line": {
"dataItem": [{
"ref": "date"
}, {
"ref": "time"
}, {
"ref": "trace",
"label": "traceLabel"
}]
},
"dataItem": [{
"ref": "bankName",
"print_type": "bold"
}, {
"ref": "terminalName"
}, {
"ref": "terminalId"
}, {
"ref": "receiptTitle"
}]
}, {
"id": 2,
"lineFiller": {
"char": "-"
},
"name": "footer",
"dataItem": {
"ref": "motto"
}
}, {
"id": 4,
"name": "cardNumber",
"dataItem": {
"ref": "cardNumber",
"label": "cardNumberLabel"
}
}, {
"id": 5,
"name": "rrnNumber",
"dataItem": {
"ref": "rrn",
"label": "rrnLabel"
}
}]
}
}
Я хочу найти все порционные ключи в этом JSON и заменить их тела в квитанциях на определения порций. Есть ли функция для чего-то подобного? Я сам пробовал некоторые решения, я написал рекурсивный метод, но он не сработал. Может ли кто-нибудь дать мне представление о том, как это сделать?
Покажите нам результат, который вы хотите получить, и нам будет проще вам помочь — person Setareh schedule 13.03.2020
Вы можете попробовать мой итератор JSON github.com/eltomjan/ETEhomeTools/blob/ master / HTM_HTA / для нерекурсивного обхода вашего JSON — довольно сложный вариант использования, например здесь stackoverflow.com/questions/58008420/ Он также имеет 2 предопределенных итератора DepthFirst и BreadthFirst. — person Setareh schedule 13.03.2020
Если приведенный выше JSON — data
, код data.doc.receipt.portion.map(keys=>data.doc.portion.filter(def=> def.id==keys.id)[0])
должен делать то, что вам нужно. — person Setareh schedule 13.03.2020
Вам нужно будет сопоставить элементы в
data.doc.receipt.portion
их соответствующему значениюdata.doc.portion
, найдя соответствующее полеid
.Вы можете удалить
portion
ключ изdata.doc
после того, как закончите.