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'>