python2通过sys.argv接收json格式参数问题一二

时间:2024-04-10 22:30:52

近期在试验平台,其中通过前端命令来执行框架,并将用例信息通过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文件,一个问题就是双引号会被当成是字符的一部分为省略掉如图:

python2通过sys.argv接收json格式参数问题一二
json中的引号消失

 解决方法:转义,如图:

python2通过sys.argv接收json格式参数问题一二
引号没有消失,正确解析

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

python2通过sys.argv接收json格式参数问题一二
中文编码报错

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

python2通过sys.argv接收json格式参数问题一二
使用正确的encoding解析

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

python2通过sys.argv接收json格式参数问题一二
很明显,sys.argv有3个长度,后2个是空格分离的“张”和“三”

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

python2通过sys.argv接收json格式参数问题一二
拼接成功

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