0

JSON 形式のデータにアクセスする方法を見つけようとしていて、1 日かけて方法を探しましたが、まだ自分のニーズに合った解決策を見つけることができません。私の問題に最も近い相対的な質問はこの質問ですが、役に立ちません。

$.ajax()基本的に、JSON 形式で返されるデータを取得しています。

[{"v":"233","pv":"1.83","avd":"00:01:58","nv":"82.83%","br":"75.11%"},
{"v":"17","pv":"3.65","avd":"00:08:31","nv":"70.59%","br":"58.82%"},
{"v":"9","pv":"2.22","avd":"00:01:51","nv":"0.00%","br":"44.44%"}]
[{"date":"2013-02-01","visits":63},
{"date":"2013-02-02","visits":30}]

私の問題は、JSON 内の要素にどのようにアクセスできるかです。たとえば、2 番目のブラケットで "nv" のすべての値または "date" のすべての値を javascript で取得したいとします。私はこのようなことに慣れていないので、用語に慣れていません。申し訳ありません。

以下は私のコードです:

var Data = $.ajax({
    url: url,
    type: 'POST',
    dataType:"json",
    async: false
}).responseText;

console.log(Data);

urlは、あなたが尋ねるかもしれない場合に備えて、私の関数内で渡される変数です。

4

2 に答える 2

4

更新: あなたの質問に対する Anthony Grist のコメントを参照してください。JSON が無効であるという事実を見逃していました。彼が回答を投稿していないので、私が取り上げます。

の2 つの別個の配列を返しているため、JSON は無効です。

[{"v":"233","pv":"1.83","avd":"00:01:58","nv":"82.83%","br":"75.11%"},
{"v":"17","pv":"3.65","avd":"00:08:31","nv":"70.59%","br":"58.82%"},
{"v":"9","pv":"2.22","avd":"00:01:51","nv":"0.00%","br":"44.44%"}]

そしてこれ:

[{"date":"2013-02-01","visits":63},
{"date":"2013-02-02","visits":30}]

JSON ドキュメントの最上位は1 つのもの (オブジェクトまたは配列) でなければならないため、それはできません。

各配列のプロパティを持つオブジェクトを返すことができます。

{
"vdata":
    [{"v":"233","pv":"1.83","avd":"00:01:58","nv":"82.83%","br":"75.11%"},
     {"v":"17","pv":"3.65","avd":"00:08:31","nv":"70.59%","br":"58.82%"},
     {"v":"9","pv":"2.22","avd":"00:01:51","nv":"0.00%","br":"44.44%"}
    ],
"datedata":
    [{"date":"2013-02-01","visits":63},
     {"date":"2013-02-02","visits":30}
    ]
}

解析後 (以下を参照)、次のようにそのデータにアクセスできます。

console.log(data.vdata[0].v); // "233"
console.log(data.datedata[0].date); // "2013-02-01"

または、2 つのスロットを持つ配列で、各スロットに配列の 1 つが含まれています。

[
    [{"v":"233","pv":"1.83","avd":"00:01:58","nv":"82.83%","br":"75.11%"},
     {"v":"17","pv":"3.65","avd":"00:08:31","nv":"70.59%","br":"58.82%"},
     {"v":"9","pv":"2.22","avd":"00:01:51","nv":"0.00%","br":"44.44%"}
    ],
    [{"date":"2013-02-01","visits":63},
     {"date":"2013-02-02","visits":30}
    ]
]

解析後 (以下を参照)、次のようにそのデータにアクセスできます。

console.log(data[0][0].v); // "233"
console.log(data[1][0].date); // "2013-02-01"

個人的には、アクセスしている配列が明確なオブジェクトを使用することを好みます。


元の答え:

jQuery は JSON を解析してオブジェクトに変換しsuccess、それを関数に渡します。これにより、他のオブジェクトと同じようにアクセスできます。あなたの場合、最上位は配列です。そう:

$.ajax({
    url: url,
    type: 'POST',
    dataType:"json",
    async: false,
    success: function(data) {
        // Use the line from above that suits the way
        // you updated your JSON structure
    }
});

補足:async: falseは推奨されておらず、いずれ削除される予定です。一般に、同期 ajax リクエストを行うことはお勧めできません。リクエスト中にブラウザの UI がロックされる傾向があります。代わりに、successコールバックがトリガーされたときに処理を続行するようにコードを構成してください。

于 2013-02-22T09:29:19.987 に答える
1

あなたの問題を理解したら、この配列内のすべてのオブジェクトに対して同じキーにアクセスする必要があります。

これを行う直接的な方法はありません。この配列内のすべてのオブジェクトを反復処理してから、それらの各オブジェクトで目的のキーを見つける必要があります。

JSON.parse() は、この文字列を Javascript オブジェクト (JSON) に変換します。

var myData = JSON.parse(Data);

for(var i = 0; i < myData.length; i++) {
    console.log("This is the nv value of the " + i + " object: " + myData[i].nv);
}
于 2013-02-22T09:35:15.630 に答える