[python] Como converter uma string em um dicionário

fundo:

Ao aprender Django, de acordo com os dados json de entrada, o backend armazena os dados e descobri que os dados json lidos pelo backend são do tipo string, mesmo que eu use o método json.loads() para convertê-lo, não é convertido em um tipo de dicionário

Foi aí que percebi que tinha que resumir e registrar.

Use json.loads() para converter

data='{"name":"fancy","age":18,"home":"china"}'

json_data=json.loads(data)
print("json转化成字典",json_data)
print("json转化成字典的类型",type(json_data))

 resultado:

json é convertido em um dicionário {'name': 'fancy', 'age': 18, 'home': 'china'}
json é convertido em um tipo de dicionário <class 'dict'>

Use eval () para converter

data='{"name":"fancy","age":18,"home":"china"}'
dic_data=eval(data)
print("使用eval转化成字典",dic_data)
print("使用eval转化成字典的类型",type(dic_data))

 resultado:

Use eval para converter para dicionário {'name': 'fancy', 'age': 18, 'home': 'china'} Use
eval para converter para tipo de dicionário <class 'dict'>

 No entanto, embora eval() seja conveniente, pode haver problemas de segurança , porque não importa o que você insira, ele será convertido em um tipo que o python possa reconhecer

Por exemplo este código:

input_info=input("os.path.realpath(__file__)")
dic_data=eval(input_info)

A saída é: Use eval para converter em um dicionário /Users/xmly/Desktop/tools/05_jiami/basic knowledge.py

É concebível que, se a entrada for um comando de código para obter dados ou um comando para excluir dados, haverá um sério risco de segurança

Mais tarde podemos usar o método ast.literal_eval()

Converter usando ast.literal_eval()

Se você usar ast.literal_eval() e fizer o seguinte:

input_info=input("os.path.realpath(__file__)")
dic_data=ast.literal_eval(input_info)

O programa relatará um erro, o que impede a entrada de comando não segura:

 Converter string normalmente:

data='{"name":"fancy","age":18,"home":"china"}'
dic_data=ast.literal_eval(data)
print("使用literal_eval转化成字典",dic_data)
print("使用literal_eval转化成字典的类型",type(dic_data))

resultado:

Use literal_eval para converter para o dicionário {'name': 'fancy', 'age': 18, 'home': 'china'}
Use literal_eval para converter para o tipo de dicionário <class 'dict'>

Acho que você gosta

Origin blog.csdn.net/weixin_43569834/article/details/131132126
Recomendado
Clasificación