【问题标题】:Find value of key in one JSON file and replace it with value of key from second JSON where value in first JSON matches key in second JSON在一个 JSON 文件中查找键的值并将其替换为第二个 JSON 中的键值,其中第一个 JSON 中的值与第二个 JSON 中的键匹配
【发布时间】:2018-12-17 07:18:43
【问题描述】:

我有两个 JSON 文件。

文件1

{
  "dataSet": "w28h46c7XUD",
  "completeDate": "2018-10-23T14:16:11.384+0000",
  "period": "2018Q3",
  "orgUnit": "tBl4WduwWRw",
  "dataValues": [
    {
     "dataElement": "QRMyfx7WQKa",
     "period": "2018Q3",
     "orgUnit": "zndtyhyYuh6",
     "categoryOptionCombo": "gGhClrV5odI",
     "attributeOptionCombo": "gGhClrV5odI",
     "value": "90",
     "storedBy": "biostatwakiso",
     "created": "2018-10-25T14:52:26.835+0000",
     "lastUpdated": "2018-10-25T14:52:26.835+0000",
     "followUp": false
    },
    {
     "dataElement": "btM76ubdLKE",
     "period": "2018Q3",
     "orgUnit": "Uuv34dh6Hjd",
     "categoryOptionCombo": "Bbb6ZmzRhtO",
     "attributeOptionCombo": "gGhClrV5odI",
     "value": "7",
     "storedBy": "HMISWAKISO",
     "created": "2018-10-11T08:58:32.046+0000",
     "lastUpdated": "2018-10-11T08:58:32.046+0000",
     "followUp": false
    },
    {
     "dataElement": "VCYHJu3BxpN",
     "period": "2018Q3",
     "orgUnit": "PYudhikuj23",
     "categoryOptionCombo": "RbnGbnNxoJF",
     "attributeOptionCombo": "gGhClrV5odI",
     "value": "3",
     "storedBy": "biostatwakiso2018",
     "created": "2018-10-11T08:58:12.787+0000",
     "lastUpdated": "2018-10-23T14:00:17.703+0000",
     "followUp": false
    },
    ...

文件2

{"tBl4WduwWRw" : "ert678dDvk"},
{"zndtyhyYuh6" : "tY67UhdJj8"},
{"Uuv34dh6Hjd" : "O0plYhdjyj"},
{"PYudhikuj23" : "H67JuyghkN"},

我想要实现的是一个脚本,它在 file1 中找到键“orgUnit”的值,并将其替换为 file2 中与其匹配的键的值。 例如。在 file1 中找到 key orgUnit = tBl4WduwWRw 的值并将其替换为 file2 中的 ert678dDvk。

【问题讨论】:

  • 您的第二个文件似乎不是有效的 JSON。它应该是一个数组吗?无论如何,使用Array.prototype.mapArray.prototype.find 的组合应该很容易做到这一点。只需 map() 超过 dataValues 并从回调函数返回相同的对象,并在另一个数组上使用 find() 修改键 orgUnit 以查找匹配值。

标签: javascript jquery arrays json


【解决方案1】:

如果您想使用自己的代码而不是使用任何库或可用函数。只是一小段代码,我们来看看:

function handleObject(object, replaceValues) {
    var values = Object.values(object);
    var keys = Object.keys(object);
    for (var i=0; i<values.length; i++) {
        object[keys[i]] = handleReplaceOneValue(values[i], replaceValues);
    }
    return object;
}

function handleArray(array, replaceValues) {
    for (var i=0; i<array.length; i++) {
        array[i] = handleReplaceOneValue(array[i], replaceValues);
    }
    return array;
}

function handleReplaceOneValue(value, replaceValues) {
    if (Array.isArray(value)) {
      return handleArray(value, replaceValues)
    }
    if (value instanceof Object) {
      return handleObject(value, replaceValues)
    }
    return replaceValues[value] ? replaceValues[value] : value;
}

然后调用:

handleObject(YourJSONFile1, YourJSONFile2); 

【讨论】:

    猜你喜欢
    • 2021-08-16
    • 1970-01-01
    • 2021-09-19
    • 1970-01-01
    • 2021-05-10
    • 2020-05-13
    • 2021-10-11
    • 1970-01-01
    • 2021-04-06
    相关资源
    最近更新 更多