修改从Node.js中的API检索的JSON数据

时间:2019-02-07 18:08:18

标签: arrays node.js json

因此,我正在努力从docs中提取数据并将其存储在mongoDB中。该API返回XML,并且使用xml2js模块作为节点,我可以相当容易地将其转换为JSON并将其存储在mongodb中。但是,xml2js模块的转换并不是100%完美的,因此我想在事后修改一些输出,但是我不确定从哪里开始。我希望有人能朝着正确的方向推动我。

这是xml2js转换的当前JSON输出。我已经对它的相关部分进行了修剪...让我知道您是否需要整个东西:

有一个结果,看起来像这样:

"sky_condition": {
        "$": {
            "sky_cover": "OVC",
            "cloud_base_ft_agl": "1600"
        }

有多个结果,看起来像这样(最多可以有4个结果):

"sky_condition": [{
        "$": {
            "sky_cover": "BKN",
            "cloud_base_ft_agl": "1800"
        }
    }, {
        "$": {
            "sky_cover": "OVC",
            "cloud_base_ft_agl": "4100"
        }
    }]

我希望有一种方法可以使它看起来像这样(以及多达4个可能的“云层”:

    "sky_condition": [
    {
        "sky_cover": "OVC",
        "cloud_base_ft_agl": "1600"
    }
],

我希望这很清楚,并且我真的很感激我付出的任何帮助。

2 个答案:

答案 0 :(得分:1)

您可以遍历对象的键,并在看到$键时将天空条件推入数组。

说API返回以下内容:

let objRet = {
    someKey: "someObject",
    someOtherKey: "someOtherObject",
    "sky_condition": [{
        "$": {
            "sky_cover": "BKN",
            "cloud_base_ft_agl": "1800"
        }
    }, {
        "$": {
            "sky_cover": "OVC",
            "cloud_base_ft_agl": "4100"
        }
    }]
}

然后我们设计一个函数:

function processObj(obj){
  for(let key in obj){
        if(typeof obj[key] == "object"){
            //If content of obj[key] is an object, process it
            processObj(obj[key]);
        }
    if(key == "$"){
        //If key is '$', push the contents of the key to our array of conditions
        skyConditions.push(obj[key]);
    }
  }
}

我们这样称呼:

let skyConditions = [];

processObj(objRet);
objRet["sky_condition"] = skyConditions;

console.log(objRet);

会返回:

{
    someKey: "someObject",
    someOtherKey: "someOtherObject",
    "sky_condition":[
        {
            "sky_cover": "BKN",
            "cloud_base_ft_agl": "1800"
        },{
            "sky_cover": "OVC",
            "cloud_base_ft_agl": "4100"
        }
    ]
}

答案 1 :(得分:0)

您可以使用xml-js代替xml2js。它不会添加"$"键并返回一个整洁的对象,因此您不必创建单独的函数来重构JSON。 https://www.npmjs.com/package/xml-js