মাইক ব্রেনানের উত্তর নিকটবর্তী, তবে পুরো কাঠামোটিকে পুনরায় অতিক্রম করার কোনও কারণ নেই। আপনি যদি object_hook_pairs
(পাইথন ২.7++) প্যারামিটারটি ব্যবহার করেন :
object_pairs_hook
anচ্ছিক ফাংশন যা জোড়গুলির অর্ডারযুক্ত তালিকার সাথে আক্ষরিক ডিকোড করা কোনও বস্তুর ফলাফলের সাথে ডাকা হবে। এর object_pairs_hook
পরিবর্তে এর মানটি ব্যবহার করা হবে dict
। এই বৈশিষ্ট্যটি কাস্টম ডিকোডারগুলি প্রয়োগ করতে ব্যবহার করা যেতে পারে যা কী এবং মান জোড়গুলি ডিকোড করা হয় এমন আদেশের উপর নির্ভর করে (উদাহরণস্বরূপ, collections.OrderedDict
সন্নিবেশের ক্রমটি মনে রাখবে)। যদি object_hook
এটিও সংজ্ঞায়িত করা হয় তবে object_pairs_hook
অগ্রাধিকার গ্রহণ করে।
এটির সাহায্যে আপনি প্রতিটি JSON অবজেক্ট আপনার হাতে তুলে ধরেন, যাতে আপনি পুনরাবৃত্তির কোনও প্রয়োজন ছাড়াই ডিকোডিংটি করতে পারেন:
def deunicodify_hook(pairs):
new_pairs = []
for key, value in pairs:
if isinstance(value, unicode):
value = value.encode('utf-8')
if isinstance(key, unicode):
key = key.encode('utf-8')
new_pairs.append((key, value))
return dict(new_pairs)
In [52]: open('test.json').read()
Out[52]: '{"1": "hello", "abc": [1, 2, 3], "def": {"hi": "mom"}, "boo": [1, "hi", "moo", {"5": "some"}]}'
In [53]: json.load(open('test.json'))
Out[53]:
{u'1': u'hello',
u'abc': [1, 2, 3],
u'boo': [1, u'hi', u'moo', {u'5': u'some'}],
u'def': {u'hi': u'mom'}}
In [54]: json.load(open('test.json'), object_pairs_hook=deunicodify_hook)
Out[54]:
{'1': 'hello',
'abc': [1, 2, 3],
'boo': [1, 'hi', 'moo', {'5': 'some'}],
'def': {'hi': 'mom'}}
লক্ষ্য করুন যে আমাকে কখনই পুনরাবৃত্তভাবে কল করতে হবে না যেহেতু আপনি যখন ব্যবহার করবেন তখন প্রতিটি বস্তু হুকের হাতে চলে যাবে object_pairs_hook
। আপনাকে তালিকাগুলির বিষয়ে যত্নশীল হতে হবে তবে আপনি দেখতে পাচ্ছেন যে তালিকার মধ্যে থাকা কোনও জিনিস সঠিকভাবে রূপান্তরিত হবে এবং এটি ঘটতে আপনাকে পুনরাবৃত্তি করতে হবে না।
সম্পাদনা: একজন সহকর্মী দেখিয়েছেন যে পাইথন 2.6 নেই object_hook_pairs
। আপনি এখনও খুব ছোট পরিবর্তন করে এই উইল পাইথন 2.6 ব্যবহার করতে পারেন। উপরের হুকটিতে, পরিবর্তন করুন:
for key, value in pairs:
প্রতি
for key, value in pairs.iteritems():
তার object_hook
পরিবর্তে ব্যবহার করুন object_pairs_hook
:
In [66]: json.load(open('test.json'), object_hook=deunicodify_hook)
Out[66]:
{'1': 'hello',
'abc': [1, 2, 3],
'boo': [1, 'hi', 'moo', {'5': 'some'}],
'def': {'hi': 'mom'}}
object_pairs_hook
JSON অবজেক্টের প্রতিটি অবজেক্টের জন্য একটি কম অভিধানে ফলাফল ব্যবহার করা , যা আপনি যদি একটি বিশাল ডকুমেন্টকে বিশ্লেষণ করে থাকেন তবে কিছুটা হলেও মূল্যবান হতে পারে।
str