2010-10-27 13 views
26

का उपयोग करके PHP में JSON ऑब्जेक्ट को पार्स करना मैंने JSON प्रारूप में डेटा की आपूर्ति करने वाली वेब सेवा से मौसम का अनुरोध करने का प्रयास किया। मेरा PHP अनुरोध कोड, जो सफल नहीं हुआ था:json_decode

$url="http://www.worldweatheronline.com/feed/weather.ashx?q=schruns,austria&format=json&num_of_days=5&key=8f2d1ea151085304102710"; 
$json = file_get_contents($url); 
$data = json_decode($json, TRUE); 
echo $data[0]->weather->weatherIconUrl[0]->value;  

यह कुछ डेटा लौटाया गया था। विवरण में से कुछ संक्षिप्तता के लिए छोटा कर दिया है, लेकिन वस्तु अखंडता को बनाए रखा है:

{ "data": 
    { "current_condition": 
     [ { "cloudcover": "31", 
      ... } ], 
     "request": 
     [ { "query": "Schruns, Austria", 
      "type": "City" } ], 
     "weather": 
     [ { "date": "2010-10-27", 
      "precipMM": "0.0", 
      "tempMaxC": "3", 
      "tempMaxF": "38", 
      "tempMinC": "-13", 
      "tempMinF": "9", 
      "weatherCode": "113", 
      "weatherDesc": [ {"value": "Sunny" } ], 
      "weatherIconUrl": [ {"value": "http:\/\/www.worldweatheronline.com\/images\/wsymbols01_png_64\/wsymbol_0001_sunny.png" } ], 
      "winddir16Point": "N", 
      "winddirDegree": "356", 
      "winddirection": "N", 
      "windspeedKmph": "5", 
      "windspeedMiles": "3" }, 
      { "date": "2010-10-28", 
      ... }, 

      ... ] 
     } 
    } 
} 
+11

आपने क्या प्रयास किया है? क्या काम नहीं करता है? क्या आप 'json_decode() 'के बारे में जानते हैं? http://www.php.net/json_Decode –

+1

@ बेन ली, यह पसंद किया जाता है कि SO उन प्रश्नों का उत्तर देता है और इसलिए Google को देव प्रश्नों के लिए डिफ़ॉल्ट स्रोत के रूप में छोड़ देता है। [रेफ मेटा] (http://meta.stackexchange.com/questions/8724/how-to-deal-with-google-questions) – jball

+0

@jball, मैं बस सहायक था। पेक्का ने पहले से ही सवाल का जवाब दिया, और मैं पीछा कर रहा था। मुझे SO पर सरल प्रश्न पोस्ट करने वाले लोगों के साथ कोई समस्या नहीं है, और उन्हें * उन्हें जवाब देना चाहिए। लेकिन एक प्रश्न के लिए यह सरल है कि अगर वे पहले खोज करते हैं तो वे लगभग निश्चित रूप से परिणाम प्राप्त करेंगे - और इससे उन्हें यह बताने में कोई दिक्कत नहीं होती है। मैंने आपके द्वारा प्रदान किए गए लिंक में पोस्ट के माध्यम से पढ़ा है और मैं इसके अधिकांश से सहमत हूं, लेकिन मैं भी असहमत हूं कि SO * supercede * google होना चाहिए। मुझे लगता है कि उन्हें टंडेम में इस्तेमाल किया जाना चाहिए, और मुझे लगता है कि यह ओपी को यह जानने में मदद करता है कि Google सबसे प्रभावी कब होता है। –

उत्तर

49

यह काम करने के लिए प्रकट होता है:

$url = 'http://www.worldweatheronline.com/feed/weather.ashx?q=schruns,austria&format=json&num_of_days=5&key=8f2d1ea151085304102710%22'; 
$content = file_get_contents($url); 
$json = json_decode($content, true); 

foreach($json['data']['weather'] as $item) { 
    print $item['date']; 
    print ' - '; 
    print $item['weatherDesc'][0]['value']; 
    print ' - '; 
    print '<img src="' . $item['weatherIconUrl'][0]['value'] . '" border="0" alt="" />'; 
    print '<br>'; 
} 

आप सत्य पर json_decode के दूसरे पैरामीटर सेट हैं, तो आप एक सरणी मिलता है, तो आप नहीं कर सकते का उपयोग -> वाक्य रचना। मैं आपको यह भी सुझाव दूंगा कि आप JSONview Firefox extension इंस्टॉल करें, ताकि आप जेनरेट किए गए जेसन दस्तावेज़ों को एक अच्छे प्रारूपित वृक्ष दृश्य में देख सकें, जैसे फ़ायरफ़ॉक्स XML संरचनाओं को प्रदर्शित करता है। यह चीजों को बहुत आसान बनाता है।

+0

गुम था, मेरे पास एक समान गहरा घोंसला वाला जेसन था जो इसे एक सरणी में परिवर्तित करने के बाद मुझे मार रहा था। मुझे आवश्यक वस्तु को प्राप्त करने के लिए सरणी के माध्यम से ड्रिल करने का उचित तरीका पता नहीं लगा सका। आसान लगता है, लेकिन किसी के रूप में PHP के लिए बिल्कुल नया, आपका सरल समाधान बिल्कुल वही था जो मुझे चाहिए था। धन्यवाद! – Scooter

+0

धन्यवाद यह मेरे लिए काम करता है –

16

इस उदाहरण

$json = '{"foo-bar": 12345}'; 

$obj = json_decode($json); 
print $obj->{'foo-bar'}; // 12345 

http://php.net/manual/en/function.json-decode.php

एनबी का प्रयास करें - दो नकारात्मक एक सकारात्मक बनाता है। :)

4

लगता है जैसे आप भूल गया [ "मूल्य"] या ->value:

echo $data[0]->weather->weatherIconUrl[0]->value; 
45

बजाय निम्नलिखित आप उपयोग करते हैं:

$json = file_get_contents($url); 
$data = json_decode($json, TRUE); 

सही बजाय एक सरणी देता है एक की वस्तु।

+3

बहुत बहुत धन्यवाद, मुझे TRUE पैरामीटर –

0

आपको यह सुनिश्चित करना होगा कि आपका सर्वर दूरस्थ कनेक्शन की अनुमति दे ताकि फ़ंक्शन file_get_contents($url) ठीक काम करता है, अधिकांश सर्वर सुरक्षा कारण के लिए इस सुविधा को अक्षम करते हैं।

0

कोड संपादित करते समय (हल्के ओसीडी), मैंने देखा कि मौसम भी एक सूची है। आपको शायद

echo $data[0]->weather[0]->weatherIconUrl[0]->value; 

कुछ सुनिश्चित करने के लिए कि आप सही दिनांक उदाहरण के लिए मौसम IconUrl का उपयोग कर रहे हैं।

संबंधित मुद्दे