Python 执行Eval 强制将字符串装换成字典时出错

 凹凸曼00威威_694 发布于 2022-10-31 23:10

我有个字符串如下:{\"module\":\"sink\", \"hostname\":\"datastream2\", \"tag\":\"urs_queryuser_mq\", \"category\":\"mq\", \"ruler\":\"MQ_55f85a369b22441e\", \"count\":425, \"totalDelay\":-1, \"totalProcessDelay\":2947890, \"time\":1430395550006}"

当我使用Python shell 时 :

ddb='{\"module\":\"sink\", \"hostname\":\"datastream2\", \"tag\":\"urs_yd_login\", \"category\":\"hdfs\", \"ruler\":\"HDFS_5aedbdf799494932\", \"count\":2, \"totalDelay\":-1, \"totalProcessDelay\":24115, \"time\":1430360048929}'
eval(ddb)
{'category': 'hdfs', 'count': 2, 'tag': 'urs_yd_login', 'totalDelay': -1, 'time': 1430360048929, 'totalProcessDelay': 24115, 'ruler': 'HDFS_5aedbdf799494932', 'hostname': 'datastream2', 'module': 'sink'}

此时能够正常转换成字典类型,但是在程序里边这样写就会抛出异常:

脚本如下格式:
print format_data[1]
ddddd = r'%s' % format_data[1].strip('"')
print ddddd

log_detail = eval(ddddd)

输出如下:
{\"module\":\"sink\", \"hostname\":\"datastream2\", \"tag\":\"urs_queryuser_mq\", \"category\":\"mq\", \"ruler\":\"MQ_55f85a369b22441e\", \"count\":425, \"totalDelay\":-1, \"totalProcessDelay\":2947890, \"time\":1430395550006}"
{\"module\":\"sink\", \"hostname\":\"datastream2\", \"tag\":\"urs_queryuser_mq\", \"category\":\"mq\", \"ruler\":\"MQ_55f85a369b22441e\", \"count\":425, \"totalDelay\":-1, \"totalProcessDelay\":2947890, \"time\":1430395550006}
unexpected character after line continuation character (, line 1)

麻烦各位大侠,帮小弟指点指点。

5 个回答
  • import json
    json_str = {\"module\":\"sink\", \"hostname\":\"datastream2\", \"tag\":\"urs_queryuser_mq\", \"category\":\"mq\", \"ruler\":\"MQ_55f85a369b22441e\", \"count\":425, \"totalDelay\":-1, \"totalProcessDelay\":2947890, \"time\":1430395550006}
    
    my_dic = json.loads(json_str)
    
    2022-10-31 23:36 回答
  • 用ast.literal_eval来做这件事,更安全和方便一点
    文档:https://docs.python.org/2/library/ast.html#ast.literal_

    2022-10-31 23:37 回答
    1. 关于为什么会有 斜杠: 这个数据是从 MQ读出来的, 默认会加上转义符
    2. 关于赋值r , 去掉了也是同样地问题
    2022-10-31 23:37 回答
  • 脚本里你用了 ddddd = r'%s' % format_data[1].strip('"') 来赋值的有 r

    shell里没这样干,所以脚本出错了

    2022-10-31 23:37 回答
  • 为什么会有斜杠在里面?本身就有的吗?可以去掉吗?试试json转换

    2022-10-31 23:37 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有