そのため、https: //www.aviationweather.gov/dataserverからデータをプルしてmongoDBに保存する作業を行っています。APIはXMLを返し、ノードにxml2jsモジュールを使用すると、かなり簡単にJSONに変換して、mongodbに保存できます。ただし、xml2jsモジュールは、変換が100%完全ではないため、事後に出力の一部を変更したいのですが、どこから始めればよいのかわかりません。私は誰かが私に正しい方向にナッジを与えることができることを望んでいました。
これは、xml2js変換からの現在のJSON出力です。関連する部分だけをトリミングしました...すべてが必要な場合はお知らせください。
結果が1つあると、次のようになります。
"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"
}
]
}
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加