Python json格式与对象之间的转换

本文探讨了从Excel读取数据到Python时遇到的挑战,特别是数据格式转换问题,包括使用eval()和json模块的方法。通过实例演示如何正确处理字符串、字典和JSON数据,避免常见错误。

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

前面写的框架基本上搭建完成了,接下来在逐步优化,这里记录下从excel读取数据时遇到的问题。

用以下一条用例举例说明:
在这里插入图片描述

当从excel读取数据后,在python中是以字符串的格式呈现的,比如我需要用到data和expected里面的数据,这时可以用eval()方法去掉引号而得到字典格式的data,expected
部分代码如下:

@ddt.ddt
class TestRegiter(unittest.TestCase):
    @ddt.data(*cases)nu'l'l
    def testregister(self,case):
        result=handler_request.visit(case['url'],case['method'],json=eval(case['data']),headers=eval(case['headers']))
        self.assertTrue(eval(case['expected'])['code']==result['code'])
        self.assertTrue(eval(case['expected'])['msg']==result['msg'])
        self.assertTrue(eval(case['expected'])['data'] == result['data'])

运行结果:
NameError: name 'null' is not defined

这时会发现eval()方法并不适用于所有场景的,当出现特殊数据的时候,比如(null,false,true)eval是没办法解析的,这种情况就需要用json转换。

json格式:
json是一种特殊的字符串格式,一般情况下接口返回的数据类型都是json,类似于字典,以key,value的形式,数据必须用双引号。但是字符串格式是没办法进行key,value进行取值,所以要先转换为字典。

json常用的四种方式:loads、load、dumps、dump

json转字典:json.loads()

import json
a='{"code":2,"msg":"账号已存在","data":true}'
b=json.loads(a)
print(b)

运行结果:
{'code': 2, 'msg': '账号已存在', 'data': True}

操作json文件:数据转换成字典,json.load()

import json
with open('file.json',encoding="utf-8") as f:
	dic = json.load(f)
	print(dic)

字典转json:json.dumps()

import json
a={'code':2,'msg':'ok','data':True}
b=json.dumps(a)
print(b)
print(type(b))
运行结果:字符串类型
{"code": 2, "msg": "ok", "data": true}
<class 'str'>

操作文件:以json串的形式写入文件,json.dump()

import json
a={'code':2,'msg':'ok','data':True}
with open('sa','w',encoding='utf8') as f:
    json.dump(a,f,ensure_ascii=False)#ensure_ascii=False为False时内容显示正常的中文

需要注意一点,json格式必须用双引号,否则会报错:

import json
a="{'code':2,'msg':'账号已存在','data:true}"
b=json.loads(a)
print(b)

运行结果:
jsondecodeerror:期望属性名称用双引号括起来:1行第2(char 1)

json.decoder.JSONDecodeError: Expecting property name enclosed in double quotes: line 1 column 2 (char 1)

也可以通过网上的在在线工具进行josn格式校验。
不是json格式:
在这里插入图片描述
json格式:
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

久醉绕心弦,

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值