将字符串转换为数据帧可读

时间:2020-04-15 22:30:42

标签: python json python-3.x python-3.7

我有很多这样的字符串:

"[{'id': 10749, 'name': 'Romance'}, {'id': 35, 'name': 'Comedy'}]"

但是由于我正在使用一个数据框,所以我需要将它们转换为JSON(或者就是这种格式的样子),以便可以访问和展平数据。关于如何实现这一目标的任何想法?

编辑:我意识到它不是JSON,但我仍然不知道如何将其转换为字典,以便对其进行操作。

3 个答案:

答案 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)