为啥 JSON 查询如果有一个元素则返回对象,如果有多个则返回列表?

Posted

技术标签:

【中文标题】为啥 JSON 查询如果有一个元素则返回对象,如果有多个则返回列表?【英文标题】:Why do JSON queries return object if there is one element, list if more than one?为什么 JSON 查询如果有一个元素则返回对象,如果有多个则返回列表? 【发布时间】:2015-08-21 10:24:00 【问题描述】:

我不得不将 python 脚本从 python2 重写为 python 3 来解决我最简单的编码问题。我不得不从 mysqldb 转移到似乎使用相同语法的 pymysql。我访问了 pymysql 的 github[1] 站点并通过以下示例注意到,当查询结果是一个元素时,它返回一个 JSON 对象,但当它返回多个时,它返回一个列表。

总是返回一个包含 0、1 或任何数量元素的列表不是更一致吗?为什么这样做?

注意:为了避免在 pymysql 中出现这种行为,只需从以下位置删除 cursorclass 参数:

# Connect to the database
connection = pymysql.connect(host='localhost',user='user',
passwd='passwd', db='db', charset='utf8mb4',
cursorclass=pymysql.cursors.DictCursor)

[1]https://github.com/PyMySQL/PyMySQL/

【问题讨论】:

【参考方案1】:

根据 JSON API 规范,此行为是由于 v1.0rc1 中的重大更改:

重大变化:单一资源对象现在应该是 用 JSON 对象而不是数组表示。这允许 请求和响应文档中的对称表示,以及 作为 PUT/POST 请求和 PATCH 操作。它还简化了 不支持批处理操作的实现(即它们可以允许对象而不是数组)。

你可以看看here

【讨论】:

以上是关于为啥 JSON 查询如果有一个元素则返回对象,如果有多个则返回列表?的主要内容,如果未能解决你的问题,请参考以下文章

反序列化具有一个元素的列表,如果列表大小为 1,则直接作为元素本身(Json 格式)

Java Selenium - 元素定位

LINQ查询操作符

为啥需要布尔返回类型? [复制]

JPA JPQL - 如果不使用子对象(没有主键/外键关系)并且可以删除,则返回的查询

Mysql 返回JSON值属性的函数