我是Python的新手,我正在使用JSON数据。我想通过向现有JSON对象添加一些键值来动态构建一个JSON对象。

我尝试了以下,但我得到TypeError: 'str'对象不支持项赋值:

import json

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

print 'JSON: ', json_data

当前回答

前面所有的答案都是正确的,这里还有一个简单的方法。例如,创建Dict数据结构来序列化和反序列化对象

(注意None在python中是Null,我故意用这个来演示如何存储Null并将其转换为json Null)

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)

其他回答

您可以创建Python字典,并在一行中将其序列化为JSON,它甚至不难看。

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

已经提供了一个解决方案,允许构建一个字典,(或嵌套字典更复杂的数据),但如果你想构建一个对象,那么也许可以尝试'ObjDict'。这样可以更好地控制要创建的json,例如保留顺序,并允许将构建作为一个对象,这可能是您的概念的首选表示。

先安装PIP对象。

from objdict import ObjDict

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

前面所有的答案都是正确的,这里还有一个简单的方法。例如,创建Dict数据结构来序列化和反序列化对象

(注意None在python中是Null,我故意用这个来演示如何存储Null并将其转换为json Null)

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)

json。加载以字符串作为输入,并返回字典作为输出。 json。dump以字典作为输入,并返回字符串作为输出。

如果你需要将JSON数据转换为python对象,可以使用Python3,在一行中完成,无需额外安装,使用SimpleNamespace和object_hook:

从字符串

import json
from types import SimpleNamespace

string = '{"foo":3, "bar":{"x":1, "y":2}}'

# Parse JSON into an object with attributes corresponding to dict keys.
x = json.loads(string, object_hook=lambda d: SimpleNamespace(**d))

print(x.foo)
print(x.bar.x)
print(x.bar.y)

输出:

3
1
2

从文件:

JSON对象:data.json

{
    "foo": 3,
    "bar": {
        "x": 1,
        "y": 2
    }
}
import json
from types import SimpleNamespace

with open("data.json") as fh:
    string = fh.read()

# Parse JSON into an object with attributes corresponding to dict keys.
x = json.loads(string, object_hook=lambda d: SimpleNamespace(**d))

print(x.foo)
print(x.bar.x)
print(x.bar.y)

输出:

3
1
2

从请求

import json
from types import SimpleNamespace
import requests

r = requests.get('https://api.github.com/users/MilovanTomasevic')

# Parse JSON into an object with attributes corresponding to dict keys.
x = json.loads(r.text, object_hook=lambda d: SimpleNamespace(**d))

print(x.name)
print(x.company)
print(x.blog)

输出:

Milovan Tomašević
NLB
milovantomasevic.com

要从API更漂亮、更快地访问JSON响应,请查看这个响应。

在将对象编码为JSON字符串之前构建对象:

import json

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

JSON是一种序列化格式,文本数据表示一种结构。它本身并不是那种结构。