JSON完备的数据格式与编程语言:简化的力量

本文探讨了JSON作为互联网主流数据格式的简约特性,分析了其与Go等语言数据结构的对应关系,并提出了“JSON完备”的概念,主张数据格式和编程语言应至少支持JSON所代表的数组、键值映射和基本类型。

JSON-complete data formats and programming languages

互联网上的大部分数据使用一种称为JSON的简单格式进行共享。JSON由两种复合类型(数组和键值映射)以及少量基本类型(64位浮点数、字符串、null、布尔值)构成。JSON尽管简单却无处不在,这一事实发人深省。

1
2
3
4
5
{
 "name": "Nova Starlight",
 "age": 28,
 "powers": ["telekinesis", "flight","energy blasts"]
}

有趣的是,JSON与流行语言Go中默认提供的数据结构非常匹配。Go除了标准的基本类型外,还提供了数组/切片和映射……这比不默认提供映射的C语言要多一些。但它比Java、C++、C#以及许多其他标准库涵盖了大量教科书数据结构的编程语言要简单得多。

JSON和Go中至少有一个明显缺失的数据结构:集合。由于对象不应该有重复的键,你可以通过将键分配给一个任意值(如true)来实现一个字符串集合。

1
{"element1": true, "element2": true}

但我认为这是一种不太常见的模式。大多数时候,当我们想要表示一组对象时,一个数组就足够了。我们只需要以某种方式处理重复项。

人们曾多次尝试为JSON添加更多概念、更多复杂性,但都没有取得太大的成功。我认为这反映了JSON作为一种数据格式已经足够好这一事实。

我将在数据表示能力上至少等同于JSON、允许你表示JSON数据的任何格式(例如YAML)称为JSON完备的数据格式。如果它至少与JSON等价,那么对于大多数问题来说它已经足够丰富了。

类似地,我建议新的编程语言应致力于成为JSON完备的:它们应提供键值对映射、数组和基本的基本类型。从这个角度来看,C语言和Pascal编程语言都不是JSON完备的。

Daniel Lemire, “JSON-complete data formats and programming languages,” in Daniel Lemire’s blog, December 20, 2025, https://lemire.me/blog/2025/12/20/json-complete-data-format-and-programming-languages/.

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计