2012-09-25 9 views
6

मेरे पास एक रेल ऐप है जो विश्व मौसम ऑनलाइन एपीआई से प्रतिक्रिया प्राप्त करता है। मैं बाकी क्लाइंट मणि का उपयोग कर रहा हूं और प्रतिक्रिया जेएसओएन प्रारूप में है।रूबी गहरा घोंसला जेएसओएन एपीआई डेटा प्राप्त कर रहा है

मैं प्रतिक्रिया के प्रयोग से पार्स:

parsed_response = JSON.parse(response) 

कहाँ parsed_response स्पष्ट रूप से एक हैश है।

मुझे जिस डेटा की आवश्यकता है वह एक हैश के अंदर एक हैश के अंदर एक और हैश के अंदर एक और हैश के अंदर एक और हैश के अंदर तार है।

आंतरिक-सबसे घोंसले वाले हैंश ["hourly"] के अंदर हैं, 8 हैश की एक सरणी, प्रत्येक 20 कुंजी के साथ, विभिन्न मौसम मानकों के स्ट्रिंग मान रखते हैं। सरणी में इनमें से प्रत्येक हैश दिन का एक अलग समय है (पूर्वानुमान तीन घंटे, 3 * 8 = 24 घंटे है)।

तो, उदाहरण के लिए, अगर मैं 9 पर मीटर में प्रफुल्लित ऊंचाई चाहते हैं, मैं इसे निम्नलिखित कॉल के साथ लगता है:

@swell_height = parsed_data["data"]["weather"][0]["hourly"][7]["swellHeight_m"] 

कहाँ सरणी में 7 वीं तत्व को "time" => "2100"

जबकि अनुरूप मैं निश्चित रूप से इस के साथ काम कर सकता हूं, मैं इस बारे में उत्सुक हूं कि मेरे डेटा तक पहुंचने की एक और सीधी विधि है, जैसे कि यह डेटाबेस तालिका थी, मैं सक्रिय रिकॉर्ड का उपयोग कर सकता था, जैसे:

@swell_height = parsed_data.swellHeight_m.where(:time => "2100") 

उत्तर

6

आप JSONPath पर देख सकते हैं। यह वही करता है जो आपको चाहिए। इसका वाक्यविन्यास XPath के समान है, लेकिन JSONPath JSON डेटा (स्पष्ट के रूप में) के साथ काम करता है। https://github.com/joshbuddy/jsonpath

मैं व्यक्तिगत रूप से यह हर परियोजना में उपयोग जहाँ मैं JSON प्रतिक्रियाओं का परीक्षण करने की जरूरत है:

एक रूबी कार्यान्वयन नहीं है।

+0

मैं इस से "चयनित" कैसे ढूंढ सकता हूं - "बच्चों" => [{"आईडी" => "10", "पाठ" => "नए आगमन", "राज्य" => {"खोला गया" = > सत्य, "चयनित" => झूठा}} – kpp

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