我有一个返回JSON对象的服务器,如下所示:
object = {"name": "VM1", "load": .5" (assume there are other key/value pairs here, and before "name" as well...)}
我想为POST创建一个新的JSON对象,该对象只包含名称和负载。
当我尝试类似的事情时:
testSend1 = json.dumps({})
testSend1["name"] = "firstVM"
我收到错误:" TypeError:' str'对象不支持项目分配"。此外,我无法将负载作为整数进行比较并从我的JSON对象中访问它们。有什么想法吗?
答案 0 :(得分:1)
Q1。为什么错误?
因为您正在尝试为序列化的JSON格式的流分配值。服务器响应可能采用JSON流格式(问题中不清楚)。您需要将json.loads反序列化为Python对象以进行此类修改
Q2。
我想为刚刚组成的POST创建一个新的JSON对象 名称和负荷。 (假设我需要创建一个新的JSON对象和 不能只是切断日期)。
如果它是一个扔掉的对象,你可以在python对象上使用 pop 方法。
进行必要的更改后。您可以调用json.dumps将其序列化为JSON对象。
建议:避免使用“object”作为名称:)
<强>插图:强>
import json
response = {"name": "VM1", "load": .5, "date": "Tuesday"}
print "Initial Value :", response
response["name"]="firstVM1"
print "After modification :", response
response.pop("date")
print "After removing date :", response
print "After serializing.."
serialized_data = json.dumps(response)
print serialized_data
print "After de-seriali\ing..."
print json.loads(serialized_data)
print "Attempting to modify serialized response"
serialized_data["name"] = "new VM"
输出:
Initial Value : {'load': 0.5, 'date': 'Tuesday', 'name': 'VM1'}
After modification : {'load': 0.5, 'date': 'Tuesday', 'name': 'firstVM1'}
After removing date : {'load': 0.5, 'name': 'firstVM1'}
After serializing..
{"load": 0.5, "name": "firstVM1"}
After de-seriali\ing...
{u'load': 0.5, u'name': u'firstVM1'}
Attempting to modify serialized response
Traceback (most recent call last):
File "j.py", line 20, in <module>
serialized_data["name"] = "new VM"
TypeError: 'str' object does not support item assignment