[英]Modifying JSON data retrieved from an API in Node.js
因此,我正在從https://www.aviationweather.gov/dataserver 中提取數據並將其存儲在 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"
}
],
我希望這很清楚,我真的很感激任何幫助我的人。
您可以遍歷對象的鍵,並在看到$
鍵時將天空條件推送到數組。
假設 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"
}
]
}
您可以使用 xml-js 而不是 xml2js。 它不添加"$"
鍵並返回一個整潔的對象,然后您不必創建單獨的函數來重構 JSON。 https://www.npmjs.com/package/xml-js
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.