我有很多这样的字符串:
"[{'id': 10749, 'name': 'Romance'}, {'id': 35, 'name': 'Comedy'}]"
但是由于我正在使用一个数据框,所以我需要将它们转换为JSON(或者就是这种格式的样子),以便可以访问和展平数据。关于如何实现这一目标的任何想法?
编辑:我意识到它不是JSON,但我仍然不知道如何将其转换为字典,以便对其进行操作。
答案 0 :(得分:2)
您可以使用ast.literal_eval
:
import ast
x = ast.literal_eval("[{'id': 10749, 'name': 'Romance'}, {'id': 35, 'name': 'Comedy'}]")
x[0]["name"] # evaluates to 'Romance'
从文档中:
安全地评估表达式节点或包含Python文字或容器显示的字符串。提供的字符串或节点只能由以下Python文字结构组成:字符串,字节,数字,元组,列表,字典,集合,布尔值和无。
这可用于安全地评估包含来自不受信任来源的Python值的字符串,而无需自己解析值。它无法评估任意复杂的表达式,例如涉及运算符或索引的对象。
答案 1 :(得分:0)
看起来数据几乎都是JSON,但我相信双引号应该在字典键的周围,而单引号应该在整个对象的周围。您可以通过运行以下命令解决此问题:
data_string = "[{'id': 10749, 'name': 'Romance'}, {'id': 35, 'name': 'Comedy'}]"
json_string = data_string.replace("'", '''"''')
您现在有了一个JSON字符串!
如果需要将字符串转换为python结构,则可以执行以下操作:
import json
data = json.loads(json_string)
print(data[0]['id']) # 10749
答案 2 :(得分:-1)
因为这可能是重复的任务。利用它来实现功能可能是一个好主意。
import json # Import json module to work with json data
import ast
data = "[{'id': 10749, 'name': 'Romance'}, {'id': 35, 'name': 'Comedy'}]"
def clean_data_for_json_loads(input_data):
"""Prepare data from untrusted sources for json formatting.
Output JSON object as string """
evaluated_data = ast.literal_eval(input_data)
json_object_as_string = json.dumps(evaluated_data)
return json_object_as_string
evaluated_data = clean_data_for_json_loads(data)
# Load json data from a string, the (s) in loads stands for string. This helps to remember the difference to json.load
json_data = json.loads(evaluated_data)
print(json_data)