json格式的python数据读取后作为API入参解析失败

 一 前言 

        JSON(JavaScript Object Notatio):JavaScript对象表示法。json是轻量级的文本数据交换格式。在http请求与http响应中广泛存在,用来实现前后端数据的交换。本篇介绍一个json格式的python数据读取后作为API入参解析失败的案例。

二 问题描述

        常见场景:API请求返回的json字符串转换成Python可识别的字典并方便读取,Python字典字符串转换成json字符串作为API请求的入参。

import json

# 包含斜杠的JSON字符串
data = "{\"first\":\"{\\\"name\\\": \\\"SSSK001\\\",\\\"attr_type\\\": 1,\\\"sub_attributes\\\": [{\\\\\\\"name\\\\\\\": \\\\\\\"小红\\\\\\\",\\\\\\\"weight\\\\\\\": 5}, {\\\\\\\"name\\\\\\\": \\\\\\\"小蓝\\\\\\\",\\\\\\\"weight\\\\\\\": 5}]}\",\"second\":\"{\\\"name\\\": \\\"SSSK002\\\",\\\"attr_type\\\": 2,\\\"sub_attributes\\\": [{\\\\\\\"name\\\\\\\": \\\\\\\"小黑\\\\\\\",\\\\\\\"weight\\\\\\\": 8}]}\"}"

# 将JSON字符串转换为Python对象
data = json.loads(data)
print(data)

# 输出:
# {'first': '{"name": "SSSK001","attr_type": 1,"sub_attributes": [{\\"name\\": \\"小红\\",\\"weight\\": 5}, {\\"name\\": \\"小蓝\\",\\"weight\\": 5}]}', 'second': '{"name": "SSSK002","attr_type": 2,"sub_attributes": [{\\"name\\": \\"小黑\\",\\"weight\\": 8}]}'}

        上述代码通过loads函数直接读取data数据时,输出并不是标准的json数据,作为API请求的入参,出现参数解析错误。

三 解决方法

        使用dumps函数。dumps是 dump string的缩写。dumps函数用于将Python对象序列化为JSON字符串。这里可以用dumps函数将data数据序列化为JSON字符串。

import json

# 准备符合格式json格式要求的python数据
data = "{\"first\":\"{\\\"name\\\": \\\"SSSK001\\\",\\\"attr_type\\\": 1,\\\"sub_attributes\\\": [{\\\\\\\"name\\\\\\\": \\\\\\\"小红\\\\\\\",\\\\\\\"weight\\\\\\\": 5}, {\\\\\\\"name\\\\\\\": \\\\\\\"小蓝\\\\\\\",\\\\\\\"weight\\\\\\\": 5}]}\",\"second\":\"{\\\"name\\\": \\\"SSSK002\\\",\\\"attr_type\\\": 2,\\\"sub_attributes\\\": [{\\\\\\\"name\\\\\\\": \\\\\\\"小黑\\\\\\\",\\\\\\\"weight\\\\\\\": 8}]}\"}"

#通过json.dumps(data)方法把python数据转化为了json数据
json_str = json.dumps(data, ensure_ascii=False)
print(json_str)

#通过json.loads(data)方法把json数据转化为了Python数据
data = json.loads(json_str)
print(data)

# 输出:
# "{\"first\":\"{\\\"name\\\": \\\"SSSK001\\\",\\\"attr_type\\\": 1,\\\"sub_attributes\\\": [{\\\\\\\"name\\\\\\\": \\\\\\\"小红\\\\\\\",\\\\\\\"weight\\\\\\\": 5}, {\\\\\\\"name\\\\\\\": \\\\\\\"小蓝\\\\\\\",\\\\\\\"weight\\\\\\\": 5}]}\",\"second\":\"{\\\"name\\\": \\\"SSSK002\\\",\\\"attr_type\\\": 2,\\\"sub_attributes\\\": [{\\\\\\\"name\\\\\\\": \\\\\\\"小黑\\\\\\\",\\\\\\\"weight\\\\\\\": 8}]}\"}"
# {"first":"{\"name\": \"SSSK001\",\"attr_type\": 1,\"sub_attributes\": [{\\\"name\\\": \\\"小红\\\",\\\"weight\\\": 5}, {\\\"name\\\": \\\"小蓝\\\",\\\"weight\\\": 5}]}","second":"{\"name\": \"SSSK002\",\"attr_type\": 2,\"sub_attributes\": [{\\\"name\\\": \\\"小黑\\\",\\\"weight\\\": 8}]}"}

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值