0

私は仕事のためにjqueryとjsonを教えています。私は大きな進歩を遂げてきましたが、今では非常に混乱しています。私の最終的な目標は、持っているテキスト ファイルから json を解析し、それらを javascript オブジェクトとして保存して、より多くのことを実行できるようにすることです。

これが私がやったことです。次のデータをjson形式で持っています(私が書いたJavaクラスから作成されました)。data.json は次のようになっていることに注意してください。

{"Time": 15, 
"Distance": 20, 
"Position":[{"x":5,"y":10},
{"x":15,"y":20}]}

この質問の上記を別の行に並べて読みやすくするようにフォーマットしましたが、生のファイルにはすべてが 1 行に含まれています。

スクリプトで次のコードを使用しました。

$(document).ready(function(){
    console.log("ready!");
    $.getJSON('data.json', function(key,val)
    {
        alert(val.Time);
        alert(val.Distance);
            alert(val.Position);
    });
});

しかし、出力されるのは 3 つの「未定義」アラートです。なんで?私の最終的な目標は、時間、距離、および位置を javascript オブジェクトとして保存して、html で作成したグラフに描画できるようにすることです。ただし、アラートがjsonオブジェクトを正しく読み取ったり解析したりしていないため、明らかにそれに近づくことはできません。

そこで、直感で次のように変更しました。

$(document).ready(function(){
        console.log("ready!");
        $.getJSON('data.json', function(key,val)
        {
            alert(key.Time);
            alert(key.Distance);
                alert(key.Position);
        });
    });

これらは、次のアラートを受け取るという点で、ほとんど有望です。

Alert 1 Output: 15, 
Alert 2 Output: 20, 
Alert 3 Output: [Object Object], [Object Object]

わかりました、私は近づいていますが、今は非常に混乱しています. キーがアラート出力「時間」、「距離」、および「位置」を提供していて、値が「15」、「20」、および「[オブジェクトオブジェクト]、[オブジェクトオブジェクト]」であってはなりません。json はハッシュテーブルのように機能すると思いました。うーん。

また、Position というリストを解析するために .each(key, val) を実行する必要がありますか? 明らかに Object Object はあまり役に立たないからです。私は基本的にこのリストの位置をJavaScriptのobjとして保存したい

myList = [[5, 10], [15,20]]

とにかく、それが私の考えです。お時間をいただきありがとうございます。返信して助けてくれた人には賛成します。これは私にとって重要です。

よろしく、 GeekyOmega

4

4 に答える 4

3

で何をしようとしているfunction(key,val) { ... }のかわかりませんが、これは jQuery の getJSON がまったく機能しない方法です。getJSON のコールバック関数は、 と の 3 つのパラメータをdata取りtextStatusますjqXHRdata各ネストされた配列ではなく、フィールド 'x' と 'y' を除いて、パラメーターは基本的に作成したい JavaScript オブジェクトであることがわかると思います。データを取り出すには、次のようにします。

for (var i = 0; i < data.Position.length; i ++)
   do_something_with (data.Position[i].x, data.Position[i].y);
于 2013-07-08T18:45:24.580 に答える
2

keyvalあなたが持っているように、それらは間違った名前です。コールバックの最初のパラメーター$.getJSON()は JSON オブジェクトです。コールバック関数に というパラメーターが渡されたAPI Doc の例を参照してくださいdata

[Object Object]toString()JavaScript のオブジェクトのデフォルトです。オブジェクト配列の値を取得するには、配列内の各オブジェクトのおよびプロパティを反復data.Positionしてアクセスできます。xy

編集してコメントに応答します。

オブジェクトの配列ではなく配列の配列として生成されるように、JSON の Position プロパティをいつでも変更できます。

または、クライアント側では、次のようにすることもできます。

var points = [];
$.each(data.Position, function(item) {
    points.push([item.x, item.y]);
});
于 2013-07-08T18:48:15.243 に答える