Python中如何将字符串转换为字典?
a 为 string 类型
{“ret”:0,“msg”:“OK”,“data”:[{“code”:“000502”,“name”:“绿景控股”,“total”:1900,“cansel”:1900,“newprice”:17.25,“costprice”:17.299},{“code”:“002758”,“name”:“华通医药”,“total”:1100,“cansel”:1100,“newprice”:28.25,“costprice”:28.354},{“code”:“002778”,“name”:“高科石化”,“total”:800,“cansel”:800,“newprice”:39.01,“costprice”:38.979}]}
请问如何高效将其转换为 dic 类型
直接采用 eval()函数失败,错误代码 SyntaxError: invalid character in identifier
谢谢
Python中如何将字符串转换为字典?
你这个不是 json 吗, json parse
# 几种常见的字符串转字典方法:
# 1. 使用eval() - 最简单但最危险(仅用于可信数据)
str_data = "{'name': 'Alice', 'age': 25, 'city': 'New York'}"
dict_data = eval(str_data)
print(dict_data) # 输出: {'name': 'Alice', 'age': 25, 'city': 'New York'}
# 2. 使用json.loads() - 最安全推荐的方式(JSON格式)
import json
json_str = '{"name": "Bob", "age": 30, "city": "London"}'
dict_data = json.loads(json_str)
print(dict_data) # 输出: {'name': 'Bob', 'age': 30, 'city': 'London'}
# 3. 使用ast.literal_eval() - 安全替代eval()
import ast
str_data = "{'name': 'Charlie', 'age': 35, 'city': 'Paris'}"
dict_data = ast.literal_eval(str_data)
print(dict_data) # 输出: {'name': 'Charlie', 'age': 35, 'city': 'Paris'}
# 4. 处理特殊格式字符串(如URL参数)
from urllib.parse import parse_qs
query_str = "name=David&age=40&city=Tokyo"
params = parse_qs(query_str)
dict_data = {k: v[0] for k, v in params.items()}
print(dict_data) # 输出: {'name': 'David', 'age': '40', 'city': 'Tokyo'}
# 5. 自定义字符串解析(复杂格式)
def parse_custom_string(s):
"""解析格式: key1=value1;key2=value2;key3=value3"""
result = {}
pairs = s.split(';')
for pair in pairs:
if '=' in pair:
key, value = pair.split('=', 1)
result[key.strip()] = value.strip()
return result
custom_str = "name=Eve;age=28;city=Berlin"
print(parse_custom_string(custom_str)) # 输出: {'name': 'Eve', 'age': '28', 'city': 'Berlin'}
核心建议:
- 如果是JSON格式,用
json.loads()最安全 - 如果是Python字典字符串,用
ast.literal_eval()替代危险的eval() - 特殊格式需要自定义解析或使用相应库
一句话总结: 根据字符串格式选择对应方法,优先用json.loads()或ast.literal_eval()。
json.loads()?
这是 PY 不是 JS
json.loads
json.loads(a)返回异常 json.decoder.JSONDecodeError: Unexpected UTF-8 BOM (decode using utf-8-sig): line 1 column 1 (char 0)
string 不能转 dict,用 json 处理
尝试 json.loads()会抛出异常: Unexpected UTF-8 BOM
找到解决方案了
if a.startswith(u’\ufeff’):
a = a.encode(‘utf8’)[3:].decode(‘utf8’)
然后再 json.loads(a)
百度到的, text 包含 BOM 字符,在线接口编码的问题吧,谢谢各位。
谢谢
import simplejson
simplejson.loads(a)
这个问题可以先用 repr 把数据打出来看看,根据具体问题进行替换或者采用其他解决方式,然后再用 eval 解决。


