2012-02-26 8 views
2

私はこのjsonレスポンスを持っており、ウォルケは "湿度"や "temp_C"などの気象条件を得るためにそれを考えようとしています。私はいくつかの方法を試みたが、うまくいかなかった。jsonレスポンスをどのように歩くのですか?

({ "data" : { "current_condition" : [ { "cloudcover" : "50", 
      "humidity" : "44", 
      "observation_time" : "12:10 AM", 
      "precipMM" : "0.0", 
      "pressure" : "1013", 
      "temp_C" : "-2", 
      "temp_F" : "29", 
      "visibility" : "16", 
      "weatherCode" : "116", 
      "weatherDesc" : [ { "value" : "Partly Cloudy" } ], 
      "weatherIconUrl" : [ { "value" : "http://www.worldweatheronline.com/images/wsymbols01_png_64/wsymbol_0004_black_low_cloud.png" } ], 
      "winddir16Point" : "W", 
      "winddirDegree" : "280", 
      "windspeedKmph" : "24", 
      "windspeedMiles" : "15" 
      } ], 
     "request" : [ { "query" : "Rochester, United States Of America", 
      "type" : "City" 
      } ], 
     "weather" : [ { "date" : "2012-02-25", 
      "precipMM" : "2.2", 
      "tempMaxC" : "-1", 
      "tempMaxF" : "31", 
      "tempMinC" : "-5", 
      "tempMinF" : "24", 
      "weatherCode" : "116", 
      "weatherDesc" : [ { "value" : "Partly Cloudy" } ], 
      "weatherIconUrl" : [ { "value" : "http://www.worldweatheronline.com/images/wsymbols01_png_64/wsymbol_0002_sunny_intervals.png" } ], 
      "winddir16Point" : "W", 
      "winddirDegree" : "281", 
      "winddirection" : "W", 
      "windspeedKmph" : "54", 
      "windspeedMiles" : "34" 
      } ] 
    } }) 

私はこれらを試してみました:

$.getJSON(urlFromMyAPI, function (data) { 
    alert(data.current_condition.temp_C); 
    alert(data.temp_C); 
    alert(data[current_condition].temp_C); 
    // I also use loop 
    for (i = 0; i <= 3; i++) { 
     alert(data.current_condition[i]) 
    } 
}); 
}; 
+0

あなたのデータ内のデータですか、何を貼り付けましたか? – Sinetheta

+0

あなたの質問がわかりませんが、このデータは世界中の天気予報のオンラインAPIから戻ってくるものです。 – Timmy

答えて

3

あなたの主な問題は、データがdataという名前のオブジェクト内にネストされているため、内部に入るために余分なレベルの参照が必要であると思います。それはあなたがネストされたオブジェクトと、より明確にアレイを見ることができるようにあなたは、このようなあなたの応答をフォーマットするとき、あなたが持っているものを見るためにも非常に簡単です:

({ "data": { 
    "current_condition": [ 
     { 
      "cloudcover": "50", 
      "humidity": "44", 
      "observation_time": "12:10 AM", 
      "precipMM": "0.0", 
      "pressure": "1013", 
      "temp_C": "-2", 
      "temp_F": "29", 
      "visibility": "16", 
      "weatherCode": "116", 
      "weatherDesc": [ 
       {"value": "Partly Cloudy" } 
      ], 
      "weatherIconUrl": [ 
       {"value": "http:\/\/www.worldweatheronline.com\/images\/wsymbols01_png_64\/wsymbol_0004_black_low_cloud.png" } 
      ], 
      "winddir16Point": "W", 
      "winddirDegree": "280", 
      "windspeedKmph": "24", 
      "windspeedMiles": "15" 
     } 
    ], 
    "request": [ 
     {"query": "Rochester, United States Of America", "type": "City" } 
    ], 
    "weather": [ 
     { 
      "date": "2012-02-25", 
      "precipMM": "2.2", 
      "tempMaxC": "-1", 
      "tempMaxF": "31", 
      "tempMinC": "-5", 
      "tempMinF": "24", 
      "weatherCode": "116", 
      "weatherDesc": [ 
       {"value": "Partly Cloudy" } 
      ], 
      "weatherIconUrl": [ 
       {"value": "http:\/\/www.worldweatheronline.com\/images\/wsymbols01_png_64\/wsymbol_0002_sunny_intervals.png" } 
      ], 
      "winddir16Point": "W", 
      "winddirDegree": "281", 
      "winddirection": "W", 
      "windspeedKmph": "54", 
      "windspeedMiles": "34" 
     } 
    ] 
} 
}) 

あなたは現在の状態を取得したい場合は、言ったtemp_Cあなたは数として一時をしたい場合は

$.getJSON(urlFromMyAPI, function(response){ 
    var temp = response.data.current_condition[0].temp_C; 
}); 

は、あなたがこれを行う必要があります:

、それはこのようになります(注私はコードより少ない混乱を作るためにあなたの無名関数の引数名を変更しました)
$.getJSON(urlFromMyAPI, function(response){ 
    var temp = parseInt(response.data.current_condition[0].temp_C, 10); 
}); 
+0

それはバディを動作させます。あなたに+1を与えることができませんでした。私は評判がありません:) – Timmy

+0

@ user1233225 - 適切な時間が経過したら、あなたの好きな答えの隣にあるチェックマークを押して、それを最高の答えとし、評判のポイントそれのために。 – jfriend00

1

ループにあなたがdata.data.current_conditionにアクセスする必要がJSONオブジェクト内部に含まれる配列によって:

for(i = 0; i <= 3; i++){ 
    alert(data.data.current_condition[i]); 

    var properties = data.data.current_condition[i]; 

    for(var y in properties) 
     alert(properties[y]); 
} 

http://jsfiddle.net/m7TZx/

+0

それは私に "undefined"を与えます – Timmy

+0

@ user1233225はちょうど答えを更新しました... – xandercoded

+0

http://jsfiddle.net/m7TZx/ – xandercoded

0

を2つの問題があります。あなたのコードで。

  1. 変数はデータと呼ばれ、JSONの最初のものはdataというオブジェクトです。
  2. current_conditionはオブジェクトの配列です(JavaScriptでは、角括弧[]は配列を参照し、中括弧{}はオブジェクトを参照します)。したがって、temp_を参照する前にcurrent_condition [index]と言う必要があります。

私は混乱を避けるために、この例ではjson_datadataと改名:

$.getJSON(urlFromMyAPI, function(json_data){ 
    console.log(json_data.data.current_condition[0].temp_C); 
}); 

複数current_conditionオブジェクトを持っている場合は、それらを通過するforループを使用することができます。

$.getJSON(urlFromMyAPI, function(json_data){ 
    var current_conditions = json_data.data.current_condition; 
    for(var i=0; i < current_conditions.length; i++) { 
     console.log(current_conditions.temp_C); 
    } 
}); 

あなたはあなたがより良いフォーマットでそれを見たい場合は、Javascriptの美化器(例えば、http://jsbeautifier.org/)を使用することができます。

console.logalertより役立つ場合があります。ほとんどのブラウザにはコンソールがありますが、Google ChromeではF12を押してコンソールをクリックすると見つかります。

0

"(")を開く前に、JSONを関数名でjsonpとして送信する場合を除いて、JSONを "()"で囲むべきではありません。今のところあなたはjsonpのURLを指すブラウザからの応答をコピーしたものとみなし、貼り付けられたものはコピーエラーです。

$ .eachを使用すると、ループが非常に簡単になります。

$.each(data.data.current_condition[0], function (key, value){ 
    console.log('Key:', key, ' Value:', value) 
}) 
関連する問題