Как я могу изменить часть json obj в javascript?

Скажем, у меня есть следующий 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

См. также:  Запрос Firebase ничего не возвращает
Понравилась статья? Поделиться с друзьями:
IT Шеф
Комментарии: 1
  1. Setareh

    Вам нужно будет сопоставить элементы в data.doc.receipt.portion их соответствующему значению data.doc.portion, найдя соответствующее поле id.

    Вы можете удалить portion ключ из data.doc после того, как закончите.

    let data = getData();
    data.doc.receipt.portion = data.doc.receipt.portion.map(p => {
      return data.doc.portion.find(p1 => p.id === p1.id);
    });
    delete data.doc.portion;
    
    console.log(data)
    
    function getData() {
      return {
        "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"
            }
          }]
        }
      }
    }
    .as-console-wrapper { top: 0; max-height: 100% !important; }

Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: