Python 将不规则的字符串(类似json格式的字符串) 转为 json 对象或 json字符串 demjson的安装及使用方法

最近上面安排了一个任务, 叫我去爬些数据, 然后我就遇到了这么一个问题, 对方网站接口返回的数据格式不是一个json, 而是一串不规则(类似json)的字符串, 哦买嘎, 这可咋整, 在线等, 急.....

别怕,弟弟来告诉你

 

1: 首先来看看接口返回的到底是什么?

paramStr = jsonpCallback({statue:1,message:"查询成功",totalCount:1,data:[{"agreementName":"免关税待遇措施","agreementCode":"13","impAgreementRate":"0"}]});

它返回的是一串看似规范又不太规范的字符串, 而我期望得到的数据为

{"data":[{"agreementCode":"13","agreementName":"免关税待遇措施","impAgreementRate":"0"}],"message":"查询成功","statue":1,"totalCount":1}

 

2: 解决思路

2.1: 首先从这串字符串paramStr 中提取出我们需要的数据

2.2: 再把提取之后的数据转为json字符串即可

 

3: 实操

3.1:  提取数据

paramStr = 'jsonpCallback({statue:1,message:"查询成功",totalCount:1,data:[{"agreementName":"免关税待遇措施","agreementCode":"13","impAgreementRate":"0"}]});'
    
paramStr = paramStr.replace('jsonpCallback','').replace('(','').replace(')','').replace(';','')

print('替换字符串后的paramStr为', paramStr)
#{statue:1,message:"查询成功",totalCount:1,data:[{"agreementName":"免关税待遇措施","agreementCode":"13","impAgreementRate":"0"}]}

3.2: 把 

{statue:1,message:"查询成功",totalCount:1,data:[{"agreementName":"免关税待遇措施","agreementCode":"13","impAgreementRate":"0"}]}

转为json字符串 

{"data":[{"agreementCode":"13","agreementName":"免关税待遇措施","impAgreementRate":"0"}],"message":"查询成功","statue":1,"totalCount":1}

 

这里我们需要用到第三方库  demjson

3.2.1 首先  导入 demjson (pip install demjson)

import demjson

3.2.2 将这段看似规范的字符串转成对象 (需要注意的是, 字符串的大体需要跟json类似, 需包括key:value的形式, 且用逗号分隔, 不一样的地方就是它的key可以不需要使用引号""括起来)

print(demjson.decode(paramStr))#将伪json转成对象  {'statue': 1, 'message': '查询成功', 'totalCount': 1, 'data': [{'agreementName': '免关税待遇措施', 'agreementCode': '13', 'impAgreementRate': '0'}]}
print(type(demjson.decode(paramStr)))#demjson后对应类型--> <class 'dict'>

此时我们发现输出的数据不是使用双引号括起来的

 

3.2.3: 把对象转换为json字符串

print(demjson.encode(demjson.decode(paramStr)))#将对象转换为json字符串 {"data":[{"agreementCode":"13","agreementName":"\u514d\u5173\u7a0e\u5f85\u9047\u63aa\u65bd","impAgreementRate":"0"}],"message":"\u67e5\u8be2\u6210\u529f","statue":1,"totalCount":1}
print(type(demjson.encode(demjson.decode(paramStr))))#encode后对应类型 <class 'str'>

这里发现输出的json数据的中文被转码了(如果您的数据没有中文或不需要用到中文,那么就到此为止啦)

 

3.2.4: 把被转码的内容转为中文

print(demjson.encode(demjson.decode(paramStr)).encode('utf-8').decode('unicode_escape'))
#{"data":[{"agreementCode":"13","agreementName":"免关税待遇措施","impAgreementRate":"0"}],"message":"查询成功","statue":1,"totalCount":1}

 

4: 一键三连 (关注, 点赞, 收藏)





 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值