近期在试验平台,其中通过前端命令来执行框架,并将用例信息通过json传递。本来以为json如此强大和简单,应该水到渠成,却不想发生一个诡异的事情,当json通过argv形式给py文件传递参数时会遇到以下坑:

1、json格式不对:传递的json中可能含有单引号,再就是双引号会失效,下面会讲到

2、json中有中文,在py文件中解析会报编码错误

3、json中有空格,导致py文件接收参数时不完整

这个问题不知道在py3中有没有出现,至少py2中是个大坑。网上的答案基本有2种:一种是先使用json.dumps()存储起来,保留原格式,然后再json.loads();还有一种是使用demjson库。但最后都失败了。今天我讲下我的解决办法,可能不是最好的,但是管用!

问题一:格式问题

通过sys.argv传参给py文件,一个问题就是双引号会被当成是字符的一部分为省略掉如图:

json中的引号消失

 解决方法:转义,如图:

引号没有消失,正确解析

问题二:中文问题,argv传参的最多大问题是此时的中文编码是控制台的编码而不是utf-8,如图:

中文编码报错

解决方法:获取字符编码再解码

使用正确的encoding解析

 问题三:json中有空格咋办,这种情况很少,但是不能完全避免,此时的空格会被认为是两个argv参数之间的分隔符,如图:

很明显,sys.argv有3个长度,后2个是空格分离的“张”和“三”

解决方法:拼接argvs,目前没想到别的方法,拼接是简单粗暴的,但是不能用join拼接,因为中文编码报错。使用+:

拼接成功

综上是三个问题的最后解决办法,如果有更好的方案,我会及时贴出来,如果有大神知道,希望指点指点! 

 

 

 

GitHub 加速计划 / js / json
41.72 K
6.61 K
下载
适用于现代 C++ 的 JSON。
最近提交(Master分支:1 个月前 )
960b763e 4 个月前
8c391e04 6 个月前
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐