0

jsonオブジェクトとパスを受け取るシンプルなアプリを作りたいです。結果は、そのパスの値です。次に例を示します。

node {"asd":{"qwe":"123", "ert":"465"}} asd.qwe

私を返す必要があります:123

私はこれを使用しています:

var result = JSON.parse(jsonToBeParsed);
console.log(result["asd"]["qwe"]);

しかし、文字列を使用して値を動的に取得できるようにしたいと思います。このようなことをする方法はありますか?:

var result = JSON.parse(jsonToBeParsed);
var path = "asd.qwe" //or whatever
console.log(result[path]);
4

1 に答える 1

3
var current = result,
    path = 'asd.qwe';

path.split('.').forEach(function(token) {
  current = current && current[token];
});

console.log(current);// Would be undefined if path didn't match anything in "result" var

編集

の目的は、が未定義のcurrent && ...場合current(パスが無効であるため)、スクリプトがundefined["something"]エラーをスローするかどうかを評価しようとしないようにすることです。ただし、ifcurrentが誤っている(つまりfalse、ゼロまたは空の文字列)場合、でプロパティを検索できないことに気づきましたtoken。したがって、おそらくチェックはcurrent != null

別の編集

Array.reduce()メソッドを使用して、1行でそれを行うためのはるかに優れた慣用的な方法を次に示します。

path.split('.').reduce(
  function(memo, token) {
    return memo != null && memo[token];
  },
  resultJson
);

これは、何も必要としないので、より良いですvar

于 2012-11-13T22:27:32.670 に答える