【问题标题】:Changing Json Data, getting TypeError更改 Json 数据,获取 TypeError
【发布时间】:2015-10-03 01:05:35
【问题描述】:

编辑:原来我的整个问题是我的 Json 之前已经被转换为字典,而我没有意识到。我错误地使用了 json.dumps() 而不是 .loads()。

原Q:我有一段Json代码我已经变成了字典。我正在从服务器检索这个 Json。当我尝试访问新字典的内部值以更改值时,我得到:

TypeError: string indices must be integers, not str

这是我的代码:

corner_data = json.dumps(r.json())

print corner_data

corner_data["geometry"]["corners"] = '{"bottom_right": {"y": "575.531616", "x": "690.547363"}, "top_left": {"y": "-146.739075", "x": "-109.105957"}}'

【问题讨论】:

  • obj['key']['key']['key'] = 'foobar'...!?假设您已将 JSON 解码为字典 obj
  • json数据是多层的。我需要访问和内部层,并将一块更改为另一块 json
  • 这意味着您正在访问列表的元素。 Python 中的 JSON 对象是字典,但它可以将列表作为内部值,因此您需要考虑这一点。
  • 你想要loads,而不是dumps。此外,如果您的代码有问题,请发布该代码并提出相关问题。

标签: python json dictionary typeerror


【解决方案1】:

使用 json.loads(不是 dumps!)将 JSON 字符串转换为 Python 字典:*

corner_data = json.loads(r.json())

修改数据,分配一个 Python 字典(不是字符串!):

corner_data['geometry']['corners'] = {'bottom_right': {'y': '575.531616', 'x': '690.547363'}, 'top_left': {'y': '-146.739075', 'x': '-109.105957'}}

将其全部编码回 JSON:

print json.dumps(corner_data)

* 我在这里假设r.json() 返回一个字符串r.json() 完全有可能已经解码了一个 JSON 字符串并返回一个字典,这取决于 r 是什么。如果是这样的话,这里就不需要json.loads,你可以直接省略它。

【讨论】:

  • 得到一个:`TypeError:预期的字符串或缓冲区`
  • 这是我从服务器{u'status': u'S', u'vendor': 1, u'name': u'test', u'created': u'2015-07-10T14:06:12.707759Z', u'geometry': {u'corners': None, u'photo': 1085, u'id': 749, u'room': {u'vanishing_points': [{u'y': u'8152.308', u'x': u'537.9231'}, {u'y': u'241.1388', u'x': u'4747.204'}, {u'y': u'256.0742', u'x': u'271.5687'}]}}, u'image_name': u'd17efc0e-ddad-45ca-8bbf-59f7267e0d62.raw_image', u'region_image': None, u'image_width': 1024, u'user': 287, u'modified': u'2015-07-10T14:06:13.223489Z', u'image_height': 768, u'id': 1085} 获取的json
  • 这不是 JSON,这已经是一个解码的 Python 字典。我的脚注似乎是正确的。所以就做corner_data = r.json()
  • 非常感谢。我的整个问题归结为,我认为是来自服务器的 json,实际上是一个 python dict。
  • 提示:print type(corner_data)
猜你喜欢
  • 2016-08-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-21
  • 2014-08-09
  • 2021-12-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多