3

私はJSONやgetJSON関数などを初めて使用しており、複数のレベルに分類され、複数の子を持つことができるJSONからデータを取得しようとしています。すぐに、次のような.eachを別の.eachと一緒に使用することで、必要な値を確認できます。

$.each(data, function(i, value1) {
    $.each(value1, function(i, value2) {
        $.each(value2, function(i, value3) {
            $.each(value3, function(i, value4) {
                $.each(value4, function(i, value5) {
                    $.each(value5, function(i, value6) {
                        alert ("we got "+i);
                    });

唯一の問題は、JSONに何が含まれているのかを常に把握しているとは限らず、無制限の子を持つ可能性があることです。では、どうすればそれ自体を動的にすることができますか?

基本的に私が探しているのは、最低レベルに達するまで子供をチェックし続けるものです。

また、最後の値iは、JSONにある値のインデックスであることがわかっています。

これを自動化して、JSONで「name」などをチェックし、「name」の値を返すようにする方法はありますか?

これが私が使用しようとしているJSONのサンプルです:

[
 {
   "children": [
    {
      "children": [
       {
        "children": [
          {
            "children": [
              {
                "bucketPath": "AUDIO\\audio0.mp3",
                "id": 305,
                "modified": "2012-08-02T10:06:52",
                "name": "audio0.mp3",
                "state": "closed"
              }
4

3 に答える 3

9

再帰を使用します。

function recurse(name, obj) {
    if (!obj || typeof obj != "object")
        alert("found leaf '"+name+"': "+obj);
    else
        $.each(obj, recurse);
}
recurse("root", data);

編集:JSONに基づいて、より具体的にすることができます:

function recurse(arr) {
   for (var i=0; i<arr.length; i++)
       for (var prop in arr[i])
           if (prop == "children") // && arr[i].children instanceof Array
               recurse(arr[i].children);
           else
               alert("we got "+prop+": "+arr[i][prop]);
}
recurse(data);
于 2012-08-29T13:33:35.363 に答える
3

これにはJPathまたはJSONPathが必要なようです

var name = jpath(data, '//name');
于 2012-08-29T13:32:34.473 に答える
0

このように JSON がやや複雑になると、dojo の JSONQuery が良い解決策になると思います。XPath に慣れていれば、これは XPath に似ています。クエリは非常に複雑になる可能性がありますが、任意の深さで特定の名前を持つプロパティを検索するクエリの例を次に示します。

var results = dojox.json.query("..property_name", json_data);

Dojo の JSONQuery の使用法を詳しく説明した良い記事があります: http://www.sitepen.com/blog/2008/07/16/jsonquery-data-querying-beyond-jsonpath/

于 2012-08-29T13:35:50.167 に答える