पायथन के साथ एक JSON ऑब्जेक्ट को गतिशील रूप से कैसे बनाएं?


274

मैं पायथन के लिए नया हूं और मैं JSON डेटा के साथ खेल रहा हूं। मैं एक मौजूदा JSON ऑब्जेक्ट में कुछ कुंजी-मान जोड़कर गतिशील रूप से 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)

JSON एक सीरियलाइज़ेशन प्रारूप है, एक संरचना का प्रतिनिधित्व करने वाला शाब्दिक डेटा । यह, स्वयं, वह संरचना नहीं है।


2
आपके समाधान ने मेरे लिए एक आकर्षण की तरह काम किया। मैं आपकी अंतिम पंक्ति का अर्थ नहीं समझ सका, लेकिन क्या आप इसे थोड़ा विस्तृत कर सकते हैं। धन्यवाद।
अक्की

6
@akki: ओपी ने JSON स्ट्रिंग (वर्णों की एक श्रृंखला जो किसी ऑब्जेक्ट को एनकोड करती है) को ऑब्जेक्ट के रूप में मानने की कोशिश की। उन्होंने उपयोग करने की कोशिश की json_data['key'] = 'value', जो काम नहीं करेगा क्योंकि json_dataपायथन शब्दकोश नहीं है।
मार्टिन पीटर्स

एक वस्तु दी जा सकती है जो वस्तु को JSON या किसी शब्दकोश में स्वचालित रूप से बदल सकती है?
चार्ली पार्कर

@CharlieParker: यह बहुत व्यापक है। पायथन ऑब्जेक्ट्स केवल JSON में परिलक्षित नहीं होते हैं, क्योंकि JSON केवल कुछ डेटा प्रकारों के साथ काफी सीमित प्रारूप है। वहाँ ढेर सारे प्रश्न यहाँ पर पहले से ही ऐसा कर रहे हैं कि कवर विशिष्ट वस्तु प्रकार और JSON, इस तरह के Django या SQLAlchemy मॉडल, आदि के रूप में
मार्टिन पीटर्स

1
@AlexJohnson: pip list: आप वही जानकारी और कर सकते हैं उत्पादन JSON देता है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, अव्यवस्थित हैं, हालांकि आप प्रकार वर्णमाला के क्रम से कर सकता है जब बुला json.dumpsयानी json.dumps(response, sort_keys=True, indent=4), लेकिन फिर आप कर रहे हैं समूहीकरण, वर्णमाला के क्रम के साथ और नहीं अपनी पसंद के आदेश अटक और प्रतिनिधित्व
जोनाथन

11

आप EasyDictपुस्तकालय ( डॉक्टर ) का उपयोग कर सकते हैं :

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

बेन्यामिन, क्या आप जेन्स डंप और भार के साथ उपयोग दिखाने के लिए अपने उदाहरण को संपादित कर सकते हैं?
थॉम्स इव्स

7

पिछले सभी उत्तर सही हैं, यहाँ एक और आसान और आसान तरीका है। उदाहरण के लिए, किसी ऑब्जेक्ट को क्रमबद्ध और अस्वाभाविक बनाने के लिए एक डिक्ट डेटा संरचना बनाएं

( नोटिस कोई नहीं है अजगर में अशक्त है और मैं जानबूझकर यह प्रदर्शित करने के लिए उपयोग कर रहा हूं कि आप अशक्त को कैसे स्टोर कर सकते हैं और इसे json jull में बदल सकते हैं)

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)

यहां छवि विवरण दर्ज करें

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.