【问题标题】:Python Interpret this jsonPython 解释这个 json
【发布时间】:2021-06-04 11:56:15
【问题描述】:

我使用以下代码:

import json
full_json = "{'Nike - Hombres Tenis Fila': ['/nike/casual/', '100', '/medias/']}"
jtopy=json.dumps(full_json) #json.dumps take a dictionary as input and returns a string as output.
dict_json=json.loads(jtopy) 

print(dict_json['Nike - Hombres Tenis Fila'][0])

如何获得价值: /nike/casual/runners/'

我不断收到错误:

TypeError:字符串索引必须是整数

【问题讨论】:

  • "json.dumps 将字典作为输入 [...]" 但 full_json 是字符串,而不是字典
  • full_json 甚至不是一个有效的 json 字符串...您尝试在非 json 输入上使用 json 模块。

标签: python json python-3.x jsonparser


【解决方案1】:

您的 json 无效,您需要交换单引号和双引号。
你也想要json.loads 而不是json.dumps

>>> import json
>>> full_json = '{"Nike - Hombres Tenis Fila": ["/nike/casual/", "100", "/medias/"]}'
>>> loaded_json = json.loads(full_json)
>>> loaded_json
{'Nike - Hombres Tenis Fila': ['/nike/casual/', '100', '/medias/']}
>>> loaded_json['Nike - Hombres Tenis Fila'][0]
'/nike/casual/'

【讨论】:

【解决方案2】:

Json 不接受其字符串中的单引号。要进行查询,您应该:

  1. 将您的 json 字符串替换为此 '{"Nike - Hombres Tenis Fila": ["/nike/casual/", "100", "/medias/"]}'
  2. 运行 json.loads dictjson = json.loads('{"Nike - Hombres Tenis Fila": ["/nike/casual/", "100", "/medias/"]}')
  3. 查询dictjson["Nike - Hombres Tenis Fila"][0]

【讨论】:

  • 有没有用python本身用双引号替换单引号?
  • 是的 - 替换方法。 json_string.replace("'", '"')。不过要小心,这将替换键名和值中的引号,这可能导致无效的 json..
  • 当我运行时出现以下错误:AttributeError: 'dict' object has no attribute 'replace'
  • 你必须替换一个 string 而不是另一种类型的对象...即在 before 你做 json.loads
  • 请注意,尝试“修复”不正确的 JSON 可能是错误的方法。 JSON 通常是通过标准库创建的,因此获得“不正确的 JSON”意味着数据实际上根本不是 JSON——它只是看起来相似。修复一些常见的已知差异可能会使应用程序因不常见的未知差异而出现错误。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-07-04
  • 2021-04-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-31
  • 1970-01-01
相关资源
最近更新 更多