2017-09-13 9 views
0

オンラインAPIから大きな入れ子になったJSON応答を取得しています。私はそれから3つの値しか必要としませんが、かなり入れ子になっています。私はそれらのフィールドのそれぞれへの正確なパスを知っています。JSONオブジェクトのパスから値を取得する

obj = { 
    "result": { 
     "data": { 
      "point1": "x", 
      "value": 2 
     }, 
     "foo": { 
      "bar": 7 
     } 
    } 
} 

を私がしたいパスlet p = 'result.data.value'let x = getElement(obj, p);を行うことができるし、削除されたすべてのエラーをきれいに保つためにチェックする(私は簡単な関数を書いたのx 2

も持っている:例えば、与えられました):

const getJSONElement = (data, path) => { 
    for(let p of path.split('.')) { 
    data = data[p]; 
    } 
    return data; 
}; 

これは機能しますが、私は何か不足している、または効率的でないように感じます。おそらくArray.reduceを使って要素に到達するより良い方法がありますか?

+0

ライブラリをインポートするオプションがある場合は

var object = { result: { data: { point1: "x", value: 2 }, foo: { bar: 7 } } }, path = 'result.data.value', getValue = (o, p) => p.split('.').reduce((r, k) => r[k], o); console.log(getValue(object, path));

は、私はselectnをお勧めします。あなたのケースでは動作しますが、ヌルチェック、配列インデックスなども処理できます。 –

+0

またはhttps://stackoverflow.com/questions/8817394/javascript-get-deep-value-from-object-by-passing-path -to-it-as-stringまたはhttps://stackoverflow.com/questions/6491463/accessing-nested-javascript-objects-with-string-keyまたはhttps://stackoverflow.com/questions/8051975/access-object -child-properties-a-dot-notation-stringを使用するか、https://stackoverflow.com/questions/6393943/convert-javascript-string-in-dot-notation-into-an-object-reference – meagar

+0

ありがとう@Meagar 、私は同様の質問を探してみましたが、私は十分にうまくいっていないと思います。いずれにせよ、私は 'reduce'を使って答えを得ました。 –

答えて

1

分割されたパス値を持つオブジェクトを減らすことができます。 https://github.com/wilmoore/selectn.js:

関連する問題