উত্তর:
দস্তাবেজগুলি যা বলে তার চেয়ে অনেক বেশি যুক্ত করার দরকার নেই। আপনি যদি কোনও ফাইল / সকেটে বা যে কোনও কিছুতে JSON ডাম্প করতে চান তবে আপনার সাথে যাওয়া উচিত dump()
। আপনার যদি কেবল স্ট্রিং হিসাবে (মুদ্রণ, বিশ্লেষণ বা যা কিছু জন্য) প্রয়োজন হয় তবে তা ব্যবহার করুনdumps()
(ডাম্প স্ট্রিং)
এই উত্তরে আন্টি হাপালার উল্লেখ হিসাবে , ensure_ascii
আচরণের ক্ষেত্রে কিছুটা ছোটখাটো পার্থক্য রয়েছে । এটি বেশিরভাগ অন্তর্নিহিত write()
ফাংশনটি কীভাবে কাজ করে তার কারণে এটি পুরো স্ট্রিংয়ের চেয়ে অংশগুলিতে কাজ করে। সে সম্পর্কে আরও তথ্যের জন্য তার উত্তরটি দেখুন।
json.dump()
FP (a .writ () - সমর্থন ফাইল-এর মতো অবজেক্ট হিসাবে JSON ফর্ম্যাট স্ট্রিম হিসাবে আপত্তি সিরিয়াল করুন
যদি নিশ্চিত_অ্যাস্কিটি মিথ্যা হয় তবে fp তে লেখা কিছু অংশ ইউনিকোড উদাহরণ হতে পারে
json.dumps()
একটি JSON ফর্ম্যাটেড স্ট্রেমে আপত্তি সিরিয়াল করুন
যদি নিশ্চিত_অ্যাস্কিটি মিথ্যা হয় তবে ফলাফলটিতে অ-এএসসিআইআই অক্ষর থাকতে পারে এবং প্রত্যাবর্তনের মানটি ইউনিকোড উদাহরণ হতে পারে
একটি s
স্ট্রিং প্যারামিটার সহ ফাংশন । অন্যরা ফাইল স্ট্রিম গ্রহণ করে।
স্মৃতি ব্যবহার এবং গতিতে।
আপনি যখন jsonstr = json.dumps(mydata)
এটি কল করেন তখন প্রথমে আপনার ডেটাটির সম্পূর্ণ কপি মেমরিতে তৈরি করে এবং কেবলমাত্র তখনই আপনি file.write(jsonstr)
এটি ডিস্কে রেখে দেন। সুতরাং এটি একটি দ্রুত পদ্ধতি তবে আপনার যদি সংরক্ষণ করার জন্য একটি বড় টুকরো ডেটা থাকে তবে সমস্যা হতে পারে।
যখন আপনি কল করবেন json.dump(mydata, file)
- 'গুলি' ছাড়াই, নতুন মেমরি ব্যবহার করা হয় না, কারণ খণ্ডগুলি ডেটা ফেলে দেয়। তবে পুরো প্রক্রিয়াটি প্রায় 2 গুণ ধীর।
উত্স: আমি উত্স কোডটি যাচাই করেছি json.dump()
এবং json.dumps()
এবং উভয় time.time()
রূপটিও পরীক্ষা করেছিলাম সময়টি পরিমাপ করে এবং এইচটিপিতে মেমরির ব্যবহার দেখে।
পাইথন 2 এর একটি উল্লেখযোগ্য পার্থক্য হ'ল আপনি যদি ব্যবহার করেন ensure_ascii=False
,dump
ফাইলে হবে সঠিকভাবে লেখার UTF-8 এনকোড তথ্য (যদি না আপনি বর্ধিত অক্ষর আছে যা হল UTF-8 নও সঙ্গে 8-বিট স্ট্রিং ব্যবহার):
dumps
অন্য দিকে, সঙ্গে ensure_ascii=False
একটি তৈরী করতে পারে str
বা unicode
ঠিক কি ধরনের স্ট্রিং জন্য ব্যবহার উপর ভিত্তি করে:
এই রূপান্তর টেবিলটি ব্যবহার করে একটি JSON ফর্ম্যাট স্ট্রের আপত্তি সিরিয়াল করুন। যদি নিশ্চিত_অ্যাস্কিটি মিথ্যা হয় তবে ফলাফলটিতে অ-এএসসিআইআই অক্ষর থাকতে পারে এবং প্রত্যাবর্তনের মানটি উদাহরণ হতে পারে
unicode
।
(জোর আমার)। এটি এখনও একটি হতে পারে নোট করুনstr
উদাহরণ ।
কোন ফর্ম্যাটটি ফিরে এসেছে এবং সম্ভবত খেলছে তা পরীক্ষা না করেই আপনি কাঠামোটিকে ফাইলে সংরক্ষণ করতে এর রিটার্ন মানটি ব্যবহার করতে পারবেন না unicode.encode
।
অবশ্যই পাইথন 3 এ আর বৈধ উদ্বেগ নয়, যেহেতু এই 8-বিট / ইউনিকোড বিভ্রান্তি আর নেই।
load
বনাম হিসাবে loads
, পুরো ফাইলটিকে একটি JSON নথি হিসাবে load
বিবেচনা করে , তাই আপনি এটি কোনও একক ফাইল থেকে একাধিক নিউলাইন সীমাবদ্ধ JSON নথি পড়তে ব্যবহার করতে পারবেন না।
json.dumps([b'123'])
-> TypeError
।