अनुरोध लाइब्रेरी से JSON प्रतिक्रिया पार्स करने का सबसे अच्छा तरीका क्या है?


266

मैं एक सर्वर पर एक RETful GET भेजने के लिए अजगर requestsमॉड्यूल का उपयोग कर रहा हूं , जिसके लिए मुझे JSON में प्रतिक्रिया मिल रही है। JSON प्रतिक्रिया मूल रूप से केवल सूचियों की एक सूची है।

देशी पायथन ऑब्जेक्ट की प्रतिक्रिया को जबरदस्त करने का सबसे अच्छा तरीका क्या है ताकि मैं इसका उपयोग करके या तो इसे प्रिंट कर सकूं या प्रिंट कर सकूं pprint?

जवाबों:


306

आप उपयोग कर सकते हैं json.loads:

import json
import requests

response = requests.get(...)
json_data = json.loads(response.text)

यह किसी दिए गए स्ट्रिंग को एक शब्दकोश में रूपांतरित करता है जिससे आप अपने JSON डेटा को अपने कोड में आसानी से एक्सेस कर सकते हैं।

या फिर आप @ Martijn के सहायक सुझाव का उपयोग कर सकते हैं, और अधिक जवाब मतदान response.json()


3
ठीक महान, हालांकि तत्वों में से प्रत्येक अभी भी यूनिकोड होगा।
felix001

@ felix001: हाँ, यद्यपि आप किसी भी डेटा का उपयोग करके परिवर्तित कर सकते हैं str()। दूसरी ओर यूनिकोड डेटा के आसपास (भविष्य की तैयारी में) होना बुरा नहीं है।
शिमोन विसेर

162
बहुत, उपयोग करने के लिए बेहतर है response.json(), क्योंकि यह उपयोग किए गए एन्कोडिंग का पता लगाने का एक बेहतर काम करेगा । (डिस्क्लेमर, मैंने उसमें से कुछ कोड लिखा है)।
मार्टिन पीटर्स

@MartijnPieters: फिर मैं प्रतिक्रिया के एक स्मरणीय पाठ पर बाद में अनुरोध json पार्सर का उपयोग कैसे कर सकता हूं? यानी के उत्पादन होने response.text()?
न्यूरिनो

requests.compat.json.loads(resp_text)
@MartijnPieters

469

चूंकि आप उपयोग कर रहे हैं requests, आपको प्रतिक्रिया की jsonविधि का उपयोग करना चाहिए ।

import requests

response = requests.get(...)
data = response.json()

यह ऑटोडेटेक्ट्स जो डिकोडर का उपयोग करता है


2
बस ध्यान रखें कि यह v0.12 और v1.0 के बीच कहीं दिखाई दिया है ताकि उदाहरण के लिए उबंटू 12.04 डेबिट-पैकेज अजगर-अनुरोधों के लिए यह फ़ंक्शन अभी तक नहीं है (यह v0.8 है)। pip install requestsहालांकि आप डिबेट पैकेज का उपयोग करने के बजाय कर सकते हैं ।
तैमूर

5
मैं थोड़ा उत्सुक हूं कि अब dataयह सूची या शब्दकोश की सूची क्या है ।
कृष्ण ओझा

6
@ कृष्ण_ओजा जेन्स dataकी संरचना को पढ़ रहा है। उदाहरण के लिए, यदि प्रतिक्रिया है: [{"a": {...}}], dataएक सूची, के साथ है list[0] == {'a': {...}}। यदि प्रतिक्रिया है {"a": "b", "c": "d"}, dataएक तानाशाही है। क्या इससे आपके प्रश्न का उत्तर मिलता है?
पद्मनाथन

1
@CGFoX क्या संस्करण चला रहे हैं? मैं अभी भी एपीआई को नवीनतम संस्करण पर उसी तरह से काम कर रहा हूं:>>> import requests >>> r = requests.get('http://httpbin.org/get') >>> r.json <bound method Response.json of <Response [200]>> >>> r.json() {'args': {}, ...}
pswaminathan

4
इसके लिए अपवोट करें क्योंकि मैं आमतौर पर json.loads (response.text) पद्धति का उपयोग कर रहा था जब तक कि कुछ बड़े जोंस पर मैंने यह नहीं पाया कि जिम्मेदारी का उपयोग करना। json () दूसरे तरीके की तुलना में बहुत तेज था।
पॉल आर।
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.