অনুরোধের লাইব্রেরি থেকে JSON প্রতিক্রিয়া পার্স করার সর্বোত্তম উপায় কী?


266

আমি একটি সার্ভারে একটি রেস্টস্টুল জিইটি প্রেরণের জন্য পাইথন requestsমডিউলটি ব্যবহার করছি , যার জন্য আমি জেএসএনে একটি প্রতিক্রিয়া পাই। জেএসওএন প্রতিক্রিয়া মূলত কেবল তালিকার একটি তালিকা।

নেটিভ পাইথন অবজেক্টের প্রতিক্রিয়াকে জোর করে বলার সর্বোত্তম উপায় কী তা আমি ব্যবহার করে পুনরুক্ত করতে পারি বা মুদ্রণ করতে পারি pprint?

উত্তর:


306

আপনি ব্যবহার করতে পারেন json.loads:

import json
import requests

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

এটি প্রদত্ত স্ট্রিংটিকে অভিধানে রূপান্তর করে যা আপনাকে আপনার কোডের মধ্যে সহজেই আপনার জেএসএন ডেটা অ্যাক্সেস করতে দেয়।

অথবা আপনি @ মার্তিজানের সহায়ক পরামর্শ এবং উচ্চতর ভোটের উত্তর, ব্যবহার করতে পারেন response.json()


3
ঠিক আছে দুর্দান্ত, তবে প্রতিটি উপাদান এখনও ইউনিকোড হতে পারে।
felix001

@ felix001: হ্যাঁ, আপনি ব্যবহার করে যে কোনও ডেটা রূপান্তর করতে পারেন str()। অন্যদিকে ইউনিকোড ডেটা চারপাশে থাকা খারাপ নয় (ভবিষ্যতের প্রস্তুতিতে)।
শিমোন দর্শক

162
ব্যবহার করা অনেক বেশি response.json(), কারণ এটি ব্যবহৃত এনকোডিংটি বের করার আরও ভাল কাজ করবে। (অস্বীকৃতি, আমি সেই কোডটির কয়েকটি লিখেছি)।
মার্টিজন পিটারস

@ মার্তিজনপিটারস: তারপরে আমি কীভাবে জেসন পার্সার অনুরোধগুলি প্রতিক্রিয়াটির একটি মেমক্যাচড পাঠ্যে ব্যবহার করতে পারি? অর্থাত্ আউটপুট হচ্ছে response.text()?
নিউউরিনো

@ মার্তিজ্নপিটারস, পাওয়া গেছে:requests.compat.json.loads(resp_text)
নিউউরিনো

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একটি ডিক্ট is এতে আপনার প্রশ্নের উত্তর হলো কি?
সোয়ামিনাথন

1
@ সিজিএফএক্স আপনি কোন সংস্করণটি চালাচ্ছেন? আমি এখনও সর্বশেষ সংস্করণে এপিআই-র কাজটি একইভাবে দেখছি:>>> import requests >>> r = requests.get('http://httpbin.org/get') >>> r.json <bound method Response.json of <Response [200]>> >>> r.json() {'args': {}, ...}
সালওয়ামিনাথন

4
এটির জন্য আপত্তি দিন কারণ আমি সাধারণত কিছু বড় জসন না হওয়া পর্যন্ত json.loads (রেসপন্স.টেক্সট) পদ্ধতিটি ব্যবহার করছিলাম আমি দেখতে পেলাম যে দায়িত্ব.জসন () ব্যবহার করা অন্য উপায়ের চেয়ে অনেক দ্রুত ছিল।
পল আর।
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.