2

実際よりもはるかに複雑に聞こえます。

したがって、Perl では、次のようなことができます。

foreach my $var (@vars) {
  $hash_table{$var->{'id'}} = $var->{'data'};
} 

JSON オブジェクトがあり、同じことをしたいのですが、jQuery で JavaScript 連想配列を使用します。

私は次のことを試しました:

hash_table = new Array();

$.each(data.results), function(name, result) {
  hash_table[result.(name).extra_info.a] = result.(name).some_dataset;
});

data は $.getJSON 呼び出しから取得した JSON オブジェクトです。多かれ少なかれ次のようになります (私の JSON 構文は少しずれている可能性があります。申し訳ありません)。

{
  results:{
    datasets_a:{
      dataset_one:{
        data:{
          //stuff
        }
        extra_info:{
          //stuff
        }
      }
      dataset_two:{
         ...
      }
      ...
    }
    datasets_b:{
      ...
    }
  }
}

しかし、これを行うたびに、firebug は次のエラーをスローします。

「XML フィルターは非 xml データに適用されます」

4

3 に答える 3

3

JSON応答を連想配列として使用できると思います。したがって、JSONに直接アクセスして使用できるはずです。

上記の例を受け取ったと仮定します。

$('result').innerHTML = data['results']['dataset_a']['dataset_two']['data'];
// Or the shorter form:
$('result').innerHTML = data.results.dataset_a.dataset_two.data;

私はこれをテストしていないことを理解しますが、括弧とドットアクセサーで名前を使用するよりも、変数で角かっこを使用する方が安全です。

あなたの例は、私が捕まえたばかりの複雑なロジックのために失敗しています。

$.each(data.results), function(name, result) {
     hash_table[result.(name).extra_info.a] = result.(name).some_dataset;
});

ここで、foreachループは変数を通過してdata.results、深さ1の内部要素を検索します。検出されたアイテムは、アイテムのキーとともにラムダに渡されます。AKA、最初の結果はになりますname = "datasets_a" item = object。これまで私をフォローしていますか?ここで、返されたハッシュにアクセスします。オブジェクトは、 ..."datasets_a"itemに子キーがあるかのようにアクセスします。nameしかし、待ってください、これオブジェクトです!

他のすべてが失敗した場合...結果のJSONをテキストフィールドに動的に書き込み、適切にフォーマットされていることを確認します。

于 2008-10-24T14:13:37.460 に答える
0

なぜ配列を別の配列に変更したいのですか?-)

-単純にデータにアクセスしてみませんか。単純化またはフィルタリングしたい場合は、オブジェクトの配列を直接トラバースできます!-)

于 2008-10-24T14:11:53.067 に答える
0

これは機能します。テストするためにスクリプトブロックにダンプするだけです。

    d = {
      'results':{
       'datasets_a':{
          'dataset_one':{
            'data':{
              'sample':'hello'
            },
            'extra_info':{
              //stuff
            }
          },
      'dataset_two':{
            ///
          }
          ///
    },
        'datasets_b':{
         ///
        }
      }
}
alert(d.results.datasets_a.dataset_one.data.sample)

これが正しく貼り付けられていることを願っています。このエディターは、コードの改行が気に入らない。

d = {
  'results':{
   'datasets_a':{
      'dataset_one':{
        'data':{
          'sample':'hello'
        },
        'extra_info':{
          //stuff
        }
      },
      'dataset_two':{
        ///
      }
      ///
    },
    'datasets_b':{
     ///
    }
  }
};

alert(d.results.datasets_a.dataset_one.data.sample)
于 2008-10-24T14:12:54.467 に答える