2

items[0].nameJSON object: に適用したいstring:があります。{"items":[{"name":"test"}]}これは variable に含まれていますtest。その文字列をオブジェクトに適用して検索したい ( test.items[0].name)。これを行う方法は 1 つしか考えられません。独自の関数を使用して角かっことドットを解析することです。これを行う別の方法はありますか?おそらくevalを使用していますか?(それを避けたいのですが...)

明確にするために:私はJSONオブジェクトを持っていますが、その中にあるものは本当に無関係です。オブジェクトを次のようにクエリできるようにする必要があります: theobject.items[0]、これは明らかに JSON オブジェクトの通常の動作です。問題は、クエリ文字列 (つまりitems[0]) が不明であることです。必要に応じてユーザー入力と呼んでください。文字通り文字列 ( var thisIsAString = "items[0]") です。theobjectそのため、値を返すためにそのクエリ文字列を追加する方法が必要ですtheobject.items[0]

4

2 に答える 2

8
function locate(obj, path) {

  path = path.split('.');
  var arrayPattern = /(.+)\[(\d+)\]/;
  for (var i = 0; i < path.length; i++) {
    var match = arrayPattern.exec(path[i]);
    if (match) {
      obj = obj[match[1]][parseInt(match[2])];
    } else {
      obj = obj[path[i]];
    }
  }

  return obj;
}

var name = locate(test, 'items[0].name');
于 2012-11-13T03:54:57.807 に答える
1

...JSON にはオブジェクトがなく、単なる文字列です。オブジェクトを扱っている場合 (つまり、ドット/ブラケット表記を使用して参照できます)、それは単なる JavaScript オブジェクト/配列です...

したがって、100% 文字列を扱っている場合は、取引内容に応じて次のようになります。

'{"name":"string","array":[0,1,2]}'

JSON.parse次に、それを;経由で送信する必要があります。

var json_string = '{"name":"string","array":[0,1,2]}',
    js_obj = JSON.parse(json_string);

js_obj.name; // "string"
js_obj.array; // [0,1,2]
js_obj.array[1]; // 1

それが文字列ではなく、実際にオブジェクト/配列であり、他のオブジェクト/配列が内部にある場合は、次のようにするだけです:

myObj.items[0].name = items[0].name;

それが文字列の場合.parseは、解析されたオブジェクトを使用して、私が行ったことを正確に実行します。サーバーに送信するために再度文字列にする必要がある場合は、次のJSON.stringifyように使用します。

var json_string = JSON.stringify(js_obj);

これで、変更した JSON 文字列が戻ってきました。

GhettoIE (IE < 8) をサポートする必要がある場合はjson2.js、Douglas Crockford からダウンロードし、そのスクリプトが見つからない場合は条件付きでページに追加しますwindow.JSON

于 2012-11-13T03:50:44.960 に答える