python 2 中解决json.loads()出现的Unicode编码问题

在Python2中使用json.loads()处理接口返回的JSON字符串时遇到Unicode编码问题,导致预期的数组对象转换失败。通过遍历转换后内容并编码,解决了这一问题。修改后的代码能够正确将JSON字符串转为期望的数组对象。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

场景:

在使用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了 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值