首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >orjson和json转储方法不是相同的python3.8

orjson和json转储方法不是相同的python3.8
EN

Stack Overflow用户
提问于 2020-07-09 08:06:06
回答 2查看 2.3K关注 0票数 2

我已经切换到orjson,因为它更快,但这引起了一个问题,我已经有相当长的一段时间了,但从来没有想过它。我最终决定做一些测试,这些就是我的测试。

代码语言:javascript
复制
import orjson, json


data = json.dumps({"channel_id" : None, "payment_source_id" : None})
print(data)

data = orjson.dumps({"channel_id" : None, "payment_source_id" : None}).decode("utf-8")
print(data)

{"channel_id": null, "payment_source_id": null}
{"channel_id":null,"payment_source_id":null}

这是我的测试文件。运行此命令时,您会看到唯一的区别是null和引号之间的空格。当我尝试使用orjson转储json数据并将其发送到一个请求中时,我收到了一个400个错误的请求,有时根本没有返回任何东西,但是当我尝试使用json lib时,我得到了一个有效的响应。我不知道该怎么做,因为就像我说的,唯一的区别是空格。有没有人有类似的问题,可以告诉我发生了什么,或者我做错了什么?还有一件事需要注意的是,如果我的代码中没有“None”,orjson就可以正常工作。

EN

回答 2

Stack Overflow用户

发布于 2020-07-09 08:24:27

我认为这没有什么不同。请检查以下内容:

代码语言:javascript
复制
import orjson, json

data1 = json.dumps({"channel_id" : None, "payment_source_id" : None})
data2 = orjson.dumps({"channel_id" : None, "payment_source_id" : None}).decode("utf-8")

print(json.loads(data2))
print (orjson.loads(data1))

{'channel_id': None, 'payment_source_id': None}
{'channel_id': None, 'payment_source_id': None}

空格的不同之处在于字符串。如果您加载到json,结果将是相同的。如果在调用api时,将string转换为json,则可以成功。

票数 4
EN

Stack Overflow用户

发布于 2021-11-17 22:47:01

orjson通过发出:而不是:,来节省几个字节(分隔符后的空格),而不是像原生json模块默认情况下发出,

原生json模块有一个选项,可以使用分隔符参数更改此行为,而orjson则没有。

在我看来,除非您正在测试任何json模块生成的内容的正确性,并且应该已经存在于您使用的由其作者编写的模块的测试套件中,否则我可能不会通过断言字节/字符串输出进行测试。相反,正如前面的注释所暗示的那样,在从json转换python对象内容之后,断言它的全部/部分。测试中的任何json模块如果不能反序列化/加载,无论如何都会失败。

(注意: orjson产生字节,而json产生_str_ings。)

代码语言:javascript
复制
>>> import orjson
>>> import json
>>> orjson.dumps({"hello":"world"})
b'{"hello":"world"}'
>>> json.dumps({"hello":"world"})
'{"hello": "world"}'
>>>
>>> type(orjson.dumps({"hello":"world"}))
<class 'bytes'>
>>> type(json.dumps({"hello":"world"}))
<class 'str'>
代码语言:javascript
复制
>>> json.dumps({"hello":"world"}, separators=(',', ':'))
'{"hello":"world"}'
>>> orjson.dumps({"hello":"world"}, separators=(',', ':'))
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: dumps() got an unexpected keyword argument
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62805435

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档