পাইথন দিয়ে কীভাবে গতিশীলভাবে একটি JSON অবজেক্ট তৈরি করবেন?


274

আমি পাইথনে নতুন এবং আমি জেএসএন ডেটা নিয়ে খেলছি। আমি বিদ্যমান জেএসওএন অবজেক্টে কিছু কী-মান যুক্ত করে গতিশীলভাবে একটি JSON অবজেক্টটি তৈরি করতে চাই।

আমি নিম্নলিখিত চেষ্টা করেছিলাম কিন্তু আমি পেয়েছি TypeError: 'str' object does not support item assignment:

import json

json_data = json.dumps({})
json_data["key"] = "value"

print 'JSON: ', json_data

উত্তর:


553

আপনি JSON স্ট্রিংটিতে এনকোড করার আগে অবজেক্টটি তৈরি করুন :

import json

data = {}
data['key'] = 'value'
json_data = json.dumps(data)

জেএসএন হ'ল সিরিয়ালাইজেশন ফর্ম্যাট, পাঠ্য উপাত্ত যা কোনও কাঠামোর প্রতিনিধিত্ব করে । এটি নিজেই, সেই কাঠামোটি নয়।


2
আপনার সমাধানটি আমার জন্য কবজির মতো কাজ করেছে। যদিও আমি আপনার শেষ লাইনের অর্থ বুঝতে পারি না, আপনি কি দয়া করে এটি কিছুটা ব্যাখ্যা করতে পারেন। ধন্যবাদ।
আক্কি

6
@ একি: ওপি জেএসওএন স্ট্রিংকে (একটি চরিত্রের একটি সিরিজ যা কোনও বস্তুকে এনকোড করে) সেই বস্তুটিকে নিজের হিসাবে বিবেচনা করার চেষ্টা করেছিল। তারা ব্যবহার করার চেষ্টা করেছিল json_data['key'] = 'value', যা কাজ করবে না কারণ json_dataপাইথন অভিধান নয়।
মার্টিজন পিটারস

প্রদত্ত কোন অবজেক্টটি কোনওভাবে কোনওভাবে স্বয়ংক্রিয়ভাবে জেএসএন বা কোনও অভিধানে রূপান্তর করতে পারে?
চার্লি পার্কার

@ চর্লিপার্কার: এটাই অনেক বিস্তৃত। পাইথন অবজেক্টগুলি কেবল জেএসএনে প্রতিফলিত হয় না, কারণ জেএসএন কেবলমাত্র কয়েকটি ডেটা টাইপের সাথে একটি সীমিত বিন্যাস। ইতিমধ্যে এখানে ইতিমধ্যে অনেকগুলি প্রশ্ন রয়েছে যা নির্দিষ্ট বস্তুর ধরণ এবং জেএসওন, যেমন জ্যাঙ্গো বা এসকিএএলএলএক্ল্যামি মডেল ইত্যাদির বিষয়ে কভার করে
মার্টিজন পিটারস

1
@ অ্যালেক্স জোনসন: pip listআপনাকে একই তথ্য দেয় এবং জেএসএন আউটপুট করতে পারে:pip list --format=json
মার্টিজান পিটারস

24

আপনি পাইথন অভিধান তৈরি করতে এবং এটি একটি লাইনে JSON এ সিরিয়ালাইজ করতে পারেন এবং এটি কুৎসিতও নয়।

my_json_string = json.dumps({'key1': val1, 'key2': val2})

21

ইতিমধ্যে একটি সমাধান সরবরাহ করা হয়েছে যা অভিধান তৈরি করার অনুমতি দেয় (বা আরও জটিল ডেটার জন্য নেস্টেড ডিকশনারি), তবে আপনি যদি কোনও অবজেক্ট তৈরি করতে চান তবে সম্ভবত 'ওবজডিক্ট' চেষ্টা করুন। এটি জাসনকে তৈরি হতে আরও অনেক বেশি নিয়ন্ত্রণ দেয়, উদাহরণস্বরূপ অর্ডার বজায় রাখা এবং এমন একটি বিষয় হিসাবে বিল্ডিংয়ের অনুমতি দেয় যা আপনার ধারণার পছন্দসই উপস্থাপনা হতে পারে।

পাইপ ইনস্টল আপত্তি প্রথম।

from objdict import ObjDict

data = ObjDict()
data.key = 'value'
json_data = data.dumps()

2
এই ঠিক আমি খুঁজছিলাম ছিল! প্রদত্ত যে dicts, unordered যদিও আপনি সাজানোর ক্রম দ্বারা পারা গেলে তার কলিং json.dumpsঅর্থাত json.dumps(response, sort_keys=True, indent=4), কিন্তু তারপর তুমি গোষ্ঠীবদ্ধ, ক্রম অনুযায়ী সঙ্গে এবং আপনার পছন্দের ক্রম আটকে এবং প্রতিনিধিত্ব
জনাথন

11

আপনি EasyDictগ্রন্থাগার ( ডক ) ব্যবহার করতে পারেন :

ইজিডিক্ট ডিক্ট মানগুলিকে অ্যাট্রিবিউট হিসাবে অ্যাক্সেস করতে দেয় (পুনরাবৃত্তভাবে কাজ করে)। পাইথন ডিক্টসের জন্য একটি জাভাস্ক্রিপ্ট-এর মতো বৈশিষ্ট্য ডট স্বরলিপি।

USEAGE

>>> from easydict import EasyDict as edict
>>> d = edict({'foo':3, 'bar':{'x':1, 'y':2}})
>>> d.foo
3
>>> d.bar.x
1

>>> d = edict(foo=3)
>>> d.foo
3

[ ইনস্টলেশন ]:

  • pip install easydict

বেনিয়ামিন, আপনি দয়া করে JSON ডাম্প এবং লোডগুলির সাথে ব্যবহার দেখানোর জন্য আপনার উদাহরণটি সম্পাদনা করতে পারেন?
থম আইভেস

7

পূর্ববর্তী সমস্ত উত্তর সঠিক, এটি করার আরও একটি সহজ উপায়। উদাহরণস্বরূপ, কোনও বিষয়কে সিরিয়ালাইজ করতে এবং ডিজাইরিয়াল করতে ডিক্ট ডেটা কাঠামো তৈরি করুন

( লক্ষ্য করুন অজগর থেকে কোনও কিছুই নাল নয় এবং আপনি কীভাবে নাল সংরক্ষণ করতে পারেন এবং এটি জসন নালতে রূপান্তর করতে পারেন তা বোঝাতে আমি এটি ব্যবহার করছি)

import json
print('serialization')
myDictObj = { "name":"John", "age":30, "car":None }
##convert object to json
serialized= json.dumps(myDictObj, sort_keys=True, indent=3)
print(serialized)
## now we are gonna convert json to object
deserialization=json.loads(serialized)
print(deserialization)

এখানে চিত্র বর্ণনা লিখুন

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.