python - 将 JSON 字符串转换为列表并访问其中的第三个元素
问题描述
我有一个如下所示的 JSON 字符串:
[["1", 1, "hy3mRUeEcb18NLC1"], {}]
我像这样加载字符串:
taskParams = json.loads(x.task_params)[0]
因为有多个 JSON 对象,我只想要第一个。
然后我尝试访问第三个元素,或者在列表索引中访问 2. 索引,如下所示:
print(taskParams[2])
它给了我以下错误:
列表索引超出范围
显然不是。
为了澄清完整的代码:
taskParams = json.loads(x.task_params)[0]
print(taskParams[2])
从开始的完整输出:
[["1", 1, "hy3mRUeEcb18NLC1"], {}]
[[], {}]
[[], {}]
json.loads() 之后的输出
['1', 1, 'hy3mRUeEcb18NLC1']
我想要的输出:
hy3mRUeEcb18NLC1
解决方案
根据https://www.json.org/json-en.html的规范,字符串需要用双引号引起来:
字符串是零个或多个 Unicode 字符的序列,用双引号括起来,使用反斜杠转义。字符表示为单个字符串。字符串与 C 或 Java 字符串非常相似。
一个可行的解决方案的例子是:
import json
x = '["1", 1, "hy3mRUeEcb18NLC1"]'
taskParams = json.loads(x)
print(taskParams[2])
哪个输出
hy3mRUeEcb18NLC1
对于较长的 JSON 字符串,您可以这样做:
import json
x = '[["1", 1, "hy3mRUeEcb18NLC1"], {}]'
taskParams = json.loads(x)[0]
print(taskParams[2])
推荐阅读
- c++ - 在 C++ 中定义 boost 库无锁队列时出现声明错误
- powershell - Powershell CSV 插入变量
- spring-boot - Sleuth 显示不正确的 traceId
- python - 包括 QStackedLayout 会打乱布局
- python - 双重问题解决后的支持向量机偏差太大了
- javascript - 如何实现对象数组的接口?
- sql-server - 从 SQL Server 中的 XML 列获取数据
- javascript - 尝试将对象添加到数组时出现意外结果
- jetbrains-ide - 在 JetBrains IDE 中进行 linting 时忽略 yaml 文件
- python - Floyd-Warshall 最多有 k 个边