从JSON数据创建对象



我在.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的对象。我真的不知道如何开始处理这个问题,所以没有任何样本可以在这里发布。

这里没有什么特别之处:

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];
}
}

您可以使用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);

相关内容

最新更新