JSON.stringify (Javascript) 和 json.dumps (Python) 在列表中不等效?

Posted

技术标签:

【中文标题】JSON.stringify (Javascript) 和 json.dumps (Python) 在列表中不等效?【英文标题】:JSON.stringify (Javascript) and json.dumps (Python) not equivalent on a list? 【发布时间】:2018-02-23 22:54:23 【问题描述】:

javascript中:

var myarray = [2, 3];
var json_myarray = JSON.stringify(myarray) // '[2,3]'

但在 Python 中:

mylist = [2, 3]
json_mylist = json.dumps(mylist) # '[2, 3]' <-- Note the space

所以这两个功能是不等价的。这对我来说有点出乎意料,并且在尝试比较一些数据时有点问题。

关于它的一些解释?

【问题讨论】:

如果您要准确比较序列化的 JSON 值,您将如何处理对象键的顺序? JSON 允许元素之间有空格; Python 默认配置是包含该空格。您在这里的实际目标是什么,比较 JSON value 或 etiher 生成的确切字节?如果是后者,您将遇到更多问题,例如未设置 JSON 对象中键值对的顺序。 输出是等价的,只是不一样。 JSON 在编码相同数据时具有一定的灵活性,它不需要规范形式。空格是一个例子,在字符串中使用 \u 转义是另一个例子。 当然,我可以将 json 字符串转换为像列表一样的对象并进行比较。但我发现直接比较它更直接。 JSON 字符串在数据库中,代表我正在搜索的 ForeignKey(Django 框架)的字段。 (而且顺序很重要)。 【参考方案1】:

不同之处在于json.dumps 默认应用了一些较小的漂亮打印,但JSON.stringify 没有。

要删除所有空格,例如JSON.stringify,您需要specify the separators。

json_mylist = json.dumps(mylist, separators=(',', ':'))

【讨论】:

它可能只适用于简单的数组。包含对象的数组仍然会产生不同的校验和,因此它们是不同的(它们有额外的字符)。

以上是关于JSON.stringify (Javascript) 和 json.dumps (Python) 在列表中不等效?的主要内容,如果未能解决你的问题,请参考以下文章

json.stringify()的妙用,json.stringify()与json.parse()的区别

json.stringify()与json.parse()的区别以及JSON.stringify()与toString()的区别

关于JSON.stringify的妙用

Json.stringify() 有啥用,没有 stringify [重复]

使用fast-json-stringify代替JSON.stringify

JSON.parse()与JSON.stringify()与qs.stringify的区别