场景:
在使用robotframework进行接口测试,需要对返回值进行检查,因为整个返回值的检查非常麻烦,涉及到循环遍历拼装字符串等操作,所以准备通过编写python函数来进行解决
整个返回值格式为[{xx:xx,xx:xx},{xx:xx,xx:xx},{xx:xx,xx:xx}],是一个字符串,预期转成一个数组,然后每一个数组里面的元素又是一个字典,需要遍历数组,获取每一个字典里面某一个key的value值
预期通过json.loads()方法将字符串转成一个数组对象,最初编写代码如下
def check_test(json_data):
mysql_str = '使用Unicode,字符集'
mysql_list = mysql_str.split(',')
s = json.loads(json_data)
check_list = []
for x in s:
check_list.append(x['meaning'])
return mysql_list == check_list
运行后发现返回结果为false,和我预期不一致,这应该是true才对
经过多方面调查发现,通过json.loads()方法转出来的内容结果编码是Unicode
最后在网上找到解决办法,对转换后的内容进行遍历实现一步步的编码就可以了
转换函数代码如下:
def unicode_convert(input_data):
if isinstance(input_data, dict):
return {unicode_convert(key): unicode_convert(value) for key, value in input_data.iteritems()}
elif isinstance(input_data, list):
return [unicode_convert(element) for element in input_data]
elif isinstance(input_data, unicode):
return input_data.encode('utf-8')
else:
return input_data
修改后的方法如下:
def check_test(json_data):
mysql_str = '使用Unicode,字符集'
mysql_list = mysql_str.split(',')
s = unicode_convert(json.loads(json_data))
check_list = []
for x in s:
check_list.append(x['meaning'])
return mysql_list == check_list
再次运行结果就为true了