JSON 中应该使用驼峰命名法还是下划线命名法?

比较在 JSON 数据中为键命名使用驼峰命名法与下划线命名法的优劣。
On this page

JSON 中应该使用驼峰命名法还是下划线命名法?

摘要

JSON 支持两种流行的键命名约定 —— 驼峰命名法和下划线命名法。本文探讨在选择这两种格式时需考虑的可读性、兼容性等因素。


JSON(JavaScript 对象表示法)已经成为一种广泛使用的数据格式,应用于 web API、配置文件和数据存储。在格式化 JSON key 时,开发人员有两种主要的命名约定可供选择:驼峰命名法和下划线命名法。本文将深入探讨这两种风格之间的论战,并提供在何种情况下各自比较合适的指导方针。

关于 JSON 的简要背景

JSON 是一种轻量级的数据交换格式,使用人类可读的文本来传输数据对象。它最初基于 JavaScript 语法的一个子集,但现在已经发展成为一种与语言无关的标准。

下面是一个 JSON 对象的示例:

 1{
 2  "firstName": "张三",
 3  "lastName": "李四",
 4  "age": 35,
 5  "address": {
 6    "street": "第一街123号",
 7    "city": "北京市",
 8    "province": "北京"
 9  }
10}

如您所见,JSON 使用键值对来存储数据。上述示例中的键使用的是驼峰命名法约定。由于其简单性、可读性和跨编程语言的通用支持,JSON 广泛用于 web API、配置文件和数据存储。

命名约定选项

在格式化 JSON 对象中的键时,主要有两种命名约定的选项:

驼峰命名法: 首字母小写,后续单词首字母大写(单词之间无空格)。例如:firstNamelastNameaddressInfo

下面我将提供一个免费的在线工具来帮助您实现驼峰转换:

下划线命名法: 每个单词之间用下划线隔开。例如:first_namelast_nameaddress_info

下面我将提供一个免费的在线工具来帮助您实现下划线转换:

在用于 JSON 键时,这两种约定都各有优点,这也正是这两种风格孰优孰劣的论战的起因。

驼峰命名法的优势

使用驼峰命名法为 JSON 键命名有几个优势:

  • 可读性 - 对于复合词,驼峰命名更易读,firstNamefirst_name 更通顺。

  • 与 JavaScript 的一致性 - 由于 JSON 起源于 JavaScript,驼峰命名与 JavaScript 的命名约定一致,感觉自然。

  • 语言支持 - 大多数现代语言中的 JSON 解析器都很好地支持驼峰样式的键。无需转换键。

  • 转换简易性 - 使用字符串操作将驼峰命名转换为下划线或其他格式较简单。拆分下划线较难。

  • 流行度 - 许多广泛使用的 JSON API 和约定采用驼峰命名,包括 Twitter、Github、JSON:API 等。

下划线命名法的优势

为 JSON 键使用下划线也有一些优点:

  • 清晰度 - 下划线可视化地清楚地分隔单词。相较粘合的驼峰命名更易解析。

  • 避免歧义 - 下划线可避免像 clientIDclientId 这样可能改变含义的键的歧义。

  • 可读性 - 一些人发现下划线式的明确词语分隔符更可读 than 驼峰式。

  • 与 SQL 的一致性 - 下划线更符合 SQL 命名约定,如数据库表中的 first_name

  • 遗留系统 - 一些旧系统有时需要下划线才能正确解析键。

流行框架中的使用情况

这里没有行业标准。一些流行框架使用的约定示例:

  • Django - 默认为 JSON 键使用下划线。设置使用驼峰命名。

  • Rails - 默认为下划线但可以通过配置覆盖为驼峰命名。

  • ASP.NET - 默认为驼峰命名但下划线也常用。

  • Express - 不限,开发者自行决定。两种都使用。

何时使用每种约定

没有通用标准的情况下,最重要的是针对一个项目至少选择一种命名约定并坚持使用,以保持一致性。

然而,下面是一些指导方针,指出在何种情况下各自风格可能更可取:

考虑使用驼峰命名法当:

  • 您的项目基于 JavaScript
  • 优先考虑复合词的可读性
  • 频繁地在各种案例之间转换
  • 与某些 JSON API 互操作

考虑使用下划线命名法当:

  • 与 SQL 数据库约定一致
  • 避免歧义至关重要
  • 使用遗留系统需要它
  • 您简单地更喜欢视觉分隔

Itoolkit 建议对 JSON 键默认使用驼峰命名法,因为在大多数情况下它提供了更好的可读性。但如果一致地应用下划线命名法也可以接受。

自动转换案例的工具

幸运的是,有实用程序可在驼峰命名法和下划线命名法之间自动转换:

  • JavaScript 库像 lodash 可以处理案例转换
1const _ = require("lodash");
2
3_.camelCase("first_name"); // 'firstName'
4_.snakeCase("lastName"); // 'last_name'
  • Python 有像 pyhumps 这样的案例转换库

  • IDE 如 IntelliJ IDEA 的编辑器插件可以即时转换案例

  • 像 eslint 这样的 linter 也可以强制执行一致的大小写

结论

对于格式化 JSON 键的驼峰命名法与下划线命名法的选择,双方都有合理的理由进行辩论。没有普遍认同的标准。

最重要的是在一个项目内坚持使用一种风格。驼峰命名法和下划线命名法都是有自己权衡利弊的合理选项。

对许多开发者来说,驼峰命名法在大多数情况下可以提供更好的整体可读性 - 特别是对于基于 JavaScript 的系统。但在某些情况下,下划线命名法也有优势,如与 SQL 约定一致。

好消息是现代语言和工具使得使用任一命名风格变得容易。因此,开发人员可以选择他们首选的约定,同时仍能与各种系统保持互操作性。