【问题标题】:creating an object from JSON data从 JSON 数据创建对象
【发布时间】:2020-07-10 02:00:42
【问题描述】:

我在 .json 文件中有以下数据:

{
    "countries": {
        "sweden": {
            "currency": "Swedish krona",
            "majorLanguage": "Swedish",
            "landArea": {               
                "value": 410330,
                "uom": "sq km"
                }           
            },
        "japan": {
            "currency": "yen",
            "majorLanguage": "Japanese",
            "landArea": {
                "value": 364500,
                "uom": "sq km"
                }           
            },
        "unitedStatesOfAmerica": {
            "currency": "US dollar",
            "majorLanguage": "English",
            "landArea": {
                "value": 3796742,
                "uom": "sq mi"
                }
            }
    }
}

并且需要想出一种方法来从中创建这个对象:

Object {
    "currency": Object {
    "japan": "yen",
    "sweden": "Swedish krona",
    "unitedStatesOfAmerica": "US dollar"
  },
  "majorLanguage": Object {
    "japan": "Japanese",
    "sweden": "Swedish",
    "unitedStatesOfAmerica": "English"
  },
  "landArea": Object {
    "japan": Object {
      "value": 364500,
      "uom": "sq km"
    },
    "sweden": Object {
      "value": 410330,
      "uom": "sq km"
    },
    "unitedStatesOfAmerica": Object {
      "value": 3796742,
      "uom": "sq mi"
    }
  }
}

将使用这些数据的应用程序是用 Vue 编写的,因此使用 JavaScript 来实现这一点是有意义的,尽管我的偏好是不使用任何第三方库。具体来说,我对不需要硬编码来手动为currencymajorLanguagelandArea 创建对象的编程方法感兴趣。我真的不知道如何开始解决这个问题,所以没有任何示例尝试在这里发布。

【问题讨论】:

标签: javascript json


【解决方案1】:

这里没什么特别的:

const result = {};

for (const name in countries) {
    const country = countries[name];
    for (const key in country) {
        if (!result[key]) result[key] = {};
        result[key][name] = country[key];
    }
}

【讨论】:

    【解决方案2】:

    您可以使用Array#reduce 方法并执行以下操作。

    const data = {"countries":{"sweden":{"currency":"Swedish krona","majorLanguage":"Swedish","landArea":{"value":410330,"uom":"sq km"}},"japan":{"currency":"yen","majorLanguage":"Japanese","landArea":{"value":364500,"uom":"sq km"}},"unitedStatesOfAmerica":{"currency":"US dollar","majorLanguage":"English","landArea":{"value":3796742,"uom":"sq mi"}}}};
                // iterate over countries object key value pair
    const res = Object.entries(data.countries).reduce((obj, [country, valObj]) => {
      // iterate over the country value key-val pair
      Object.entries(valObj).forEach(([key, val]) => {
        // define key if not defined
        obj[key] = obj[key] || {};
        // define the value within object where key is country
        obj[key][country] = val;
      })
      return obj;
    }, {})
    
    console.log(res);

    【讨论】:

      猜你喜欢
      • 2014-01-05
      • 2013-05-25
      • 2019-07-27
      • 2021-03-08
      • 2016-06-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-25
      相关资源
      最近更新 更多