将JSON数组转换为Python列表

103
import json

array = '{"fruits": ["apple", "banana", "orange"]}'
data  = json.loads(array)

这是我的 JSON 数组,但我希望将 'fruits' 字符串中的所有值转换为 Python 列表。请问正确的做法是什么?


4
你的意思是什么?data['fruits']将会是一个列表。 - jdi
6
你有一个包含数组的JSON对象。JSON数组类似于Python中的“列表”。JSON对象类似于Python中的“字典”。严格来说,你有一个包含单个键值对的字典,其中值是一个字符串列表。 - Joel Cornett
4个回答

158
import json

array = '{"fruits": ["apple", "banana", "orange"]}'
data  = json.loads(array)
print data['fruits']
# the print displays:
# [u'apple', u'banana', u'orange']

你已经拥有了一切所需的东西。data将是一个字典,data ['fruits']将是一个列表。


1
哦,好的。我以为那只会从对象中获取单个字符串,而不是数组。谢谢! - user1447941
你是不是想说 'print(data['fruits'])',因为对我来说,你的代码只有在数据周围加上()才能正常工作 :) - Maarten
1
@MaartenOlijve 这段代码是在2014年用Python 2.7编写的。我猜你现在正在使用Python 3进行测试,其中print现在是一个函数调用。 - jdi
为什么有 u'apple,u 表示什么? @rakesh - shashikant kuswaha
1
@shashikantkuswaha 这是在4年前使用Python2编写的,当时本地字符串格式为ASCII。Unicode是不同的类型,Unicode字面量写作u'foo'。如果您只使用过Python3,则不会看到该样式,因为所有字符串都是本地Unicode。 - jdi
显示剩余2条评论

15

在Ideone上进行了测试。

import json
array = '{"fruits": ["apple", "banana", "orange"]}'
data  = json.loads(array)
fruits_list = data['fruits']
print fruits_list

3

Python标准库ast中的ast.literal_eval()也可以用于解析JSON字符串。

如果字符串看起来像JSON但实际上是Python对象的字符串表示形式,则特别有用。在这种情况下,json.loads无法工作,但ast.literal_eval可以正常工作。

import ast
array = '{"fruits": ("apple", "banana", "orange")}'
a = ast.literal_eval(array)  # {'fruits': ('apple', 'banana', 'orange')}
j = json.loads(array)        # JSONDecodeError

0

data 会返回一个列表的字符串表示形式,但实际上它仍然是一个字符串。只需使用 type(data) 检查 data 的类型即可。这意味着如果您尝试在此列表的字符串表示形式上使用索引,例如 data['fruits'][0],它将返回 "[",因为它是 data['fruits'] 的第一个字符。

您可以使用 json.loads(data['fruits']) 将其转换回 Python 列表,以便您可以与常规列表索引交互。还有另外两种方法可以将其转换回 Python 列表,建议参考 此处


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接