我个人感觉 json 有一个很大的弊端就是 里面不能写注释
有时候想给 package.json 加注释,不好加
1
constexpr 2021-08-06 13:19:46 +08:00 via Android
未来会有带注释的 json 吗?
|
3
keepeye 2021-08-06 13:26:47 +08:00 3
yaml/toml?
|
4
ladypxy 2021-08-06 13:27:24 +08:00
现在不是用 YAML 了么
|
5
BeautifulSoap 2021-08-06 13:29:27 +08:00 via Android
yaml 的问题感觉在于,靠缩进,比 json 复杂,有时候手写 yaml 老出错
|
6
3dwelcome 2021-08-06 13:29:47 +08:00 via Android
学 chrome,加个能注释的 DOM 结点,名字是#comment 开头,就不会有问题了。
|
7
3dwelcome 2021-08-06 13:35:08 +08:00 via Android
|
8
ToPoGE 2021-08-06 13:35:40 +08:00 3
我投 toml 一票
|
9
iamzuoxinyu 2021-08-06 13:35:40 +08:00 via Android
YAML 不可能取代 json 。
|
10
icy37785 2021-08-06 13:43:09 +08:00 via iPhone
json5 不是可以写注释了么
|
11
ipwx 2021-08-06 13:44:17 +08:00
缩进有啥怕写错的
|
12
qW7bo2FbzbC0 2021-08-06 13:49:23 +08:00
@constexpr #1 最开始的 json 允许注释,但被要求不能加注释,似乎有这样的都市传说
|
13
EKkoGG 2021-08-06 13:56:28 +08:00
才知道 json 不能加注释。。。因为有一些项目加了注释好像也没影响
|
14
wdssmq 2021-08-06 14:45:18 +08:00
目前只遇到 VSCode 的配置项可以加注释。
|
15
falcon05 2021-08-06 14:51:56 +08:00
我不喜欢 YAML,各种蛋疼,只有 json 能替代 json
|
16
nutting 2021-08-06 14:53:25 +08:00
以后应该不用人写代码了吧,所以是二进制序列化
|
17
tghoul 2021-08-06 14:55:24 +08:00 10
JSON 设计之初就是为了做数据交换的呀,跟 Yaml Toml 这些为配置而生的语言设计理念都是不同的。JSON 加上注释我觉得反而是倒退。
|
19
xupefei 2021-08-06 15:17:53 +08:00 via iPhone
不如来写 jsonnet
|
20
yimity 2021-08-06 16:07:02 +08:00 3
{
"a": "a", "b": "b", "//这里是注释": "注释", "c":"c" } 谁说 json 不支持注释。 |
21
binaryify 2021-08-06 16:49:24 +08:00
jsonc 了解下
|
22
Vegetable 2021-08-06 16:54:31 +08:00 2
淘汰 json 和淘汰 package.json 是两回事
|
23
suzic 2021-08-06 17:09:59 +08:00 via Android
json 就不适合当配置用
|
25
CodeCodeStudy 2021-08-06 17:35:51 +08:00
@ipwx 复制粘贴容易搞错
|
27
gamexg 2021-08-06 18:08:26 +08:00
在可以选择时,
我一直用 toml 做配置文件格式,觉得比 yaml 好用。 jaon5 支持注释,共享配置时也挺方便。 |
28
linqin003707 2021-08-06 18:09:14 +08:00
protobuf
|
29
Trim21 2021-08-06 18:10:04 +08:00 via Android
淘汰 json 作为配置文件
|
30
Building 2021-08-06 18:25:27 +08:00 via iPhone
用 key-value 作为注释不就有注释了吗?
|
32
Kaciras 2021-08-06 18:26:14 +08:00
JSON 同时具备可读性和高信息密度,即能传输也能写配置,一会还真想不出来其它哪个能做到的。
|
33
jim9606 2021-08-06 18:32:19 +08:00
淘汰是不可能的,xml 都还活得好好的。注释的话 json5 是无痛解决方案,顺带解决手撸 json 总少了引号逗号导致出错的烦恼。
json 好就好在稍微新点的编程语言都直接在标准库包含 json 实现了,省去外部依赖的麻烦。 |
34
uselessVisitor 2021-08-06 18:45:27 +08:00
数据传输的还是 json 格式比较好,配置文件的话看什么类型了,像版本这种的还是 JSON/XML 处理的好一些,配置文件的话可以 yml
|
35
Cbdy 2021-08-06 19:41:19 +08:00 via Android
没有了,JSON 是完美的格式
|
36
billlee 2021-08-06 21:03:25 +08:00
感觉不可能了。细分领域可以有更先进的格式,但 JSON 会是那个默认选择。
|
37
12101111 2021-08-06 21:08:57 +08:00
toml 是标准化的 ini, 是用来做手写的配置文件的
json 还是更接近机器读的东西, 但是偶尔又会有人来看一看. 看的人多了就应该选 toml, 真的没人看那就二进制格式得了. |
38
namelosw 2021-08-06 21:16:29 +08:00
比 JSON 复杂的,似乎都没啥必要,比如 XML
比 JSON 看着简单的,比如 YAML,parse 起来都麻烦 这些年看到有点意义的,可能就是 EDN 之类的。JSON 的类型写死了就那几种,比如 date,或者 set 之类的就不好指定消费者用什么 parser,然后就只能把类型写在数据里,EDN 就是可以制定一些额外的类型,然后请求的接收方可以针对可能出现的类型统一写 parser,比如日期或者 UUID 之类的,这样就少了很多手动转换的胶水代码。 |
39
3dwelcome 2021-08-06 21:23:25 +08:00 via Android
@namelosw json 最大问题是逗号,你看别的 yml 和 toml 两个格式都没有逗号,都是用换行直接语义分割,就 json 有。
|
40
airyland 2021-08-06 21:25:45 +08:00
var a = {
"a": "这是同字段注释", "a": "a" } |
41
cpstar 2021-08-06 21:29:02 +08:00
以数据来讲,除非 key-value 不管用,否则 json 无可替代的优势。
但是以数据来讲,为啥要加注释? 那加了注释,就不是数据维度了。而是 coding 编码的事情了,那不要说 json 不行,而是框架不行。 |
42
namelosw 2021-08-06 21:52:52 +08:00
@3dwelcome 逗号的话随手就写上了,像 Rust 这种新生代语言还有分号…
换行分割 parser 写起来就麻烦些,JSON 之所以这么流行,和 parser 好写有很大关系,任何一个新语言和 DSL 都可以很快地写出来一个 JSON 库 真说比较影响使用的是没有注释,然后双引号之类的 escape 过于复杂等等 |
44
iyaozhen 2021-08-06 22:26:39 +08:00
我在想 json 不是被 pb 替代了么 原来说的是配置。。。
|
46
searene 2021-08-06 22:33:27 +08:00
lisp 代码可以直接当成配置用
|
48
weyou 2021-08-06 23:30:15 +08:00 via Android
用法问题。json 格式本来就不是用于配置文件的,而是作为内部数据交换的,面向的是”机器“。它就不是给人手动编辑和阅读的一个格式,要啥注释?
yaml 才是适合配置文件的格式,面向的是“人”。它不需要逗号,不需要引号,方便编辑。而且换行缩进增强了可读性。 |
49
airyland 2021-08-06 23:33:28 +08:00
@Trim21 应该说取决于解析实现,大多数情况下可能只是 warning 不是 error,不鼓励有重复 key 。js 中只会取后者的值。
https://stackoverflow.com/questions/21832701/does-json-syntax-allow-duplicate-keys-in-an-object/23195243#23195243 |
50
chaleaoch 2021-08-06 23:48:07 +08:00 2
我去谢谢楼主, 我一直没想明白为什么 yaml 比 json 对人类友好.
现在知道了 至少原因之一是因为 json 不让注释啊... |
52
binux 2021-08-07 00:20:06 +08:00 via Android
@yimity 你这叫做 js 不叫 JSON,JSON 标准中是不允许注释的,你的能用只是恰好 JSON 是符合 js 语法的罢了
https://stackoverflow.com/q/244777 |
54
szzhiyang 2021-08-07 00:50:18 +08:00
没有。
|
55
NXzCH8fP20468ML5 2021-08-07 01:01:01 +08:00 via Android
toml
|
56
iseki 2021-08-07 01:42:19 +08:00 via Android
也许 yaml 等格式可以替代下? json 不支持注释和末尾逗号,都是巨坑。但是 yaml 的缩进对眼睛要求有点高也挺难受的…
|
57
EscYezi 2021-08-07 03:24:52 +08:00 via iPhone
xml 还没被淘汰呢,别说 json 了 2333
|
58
HankLu 2021-08-07 04:10:49 +08:00
为什么要淘汰 json ?
|
59
NilChan 2021-08-07 04:24:45 +08:00 via Android
yaml 就算了吧,反人类的东西
|
60
ikaros 2021-08-07 09:05:03 +08:00
toml yaml 层级肉眼看瞎
|
61
ily433664 2021-08-07 09:26:55 +08:00
json 和 yaml 的主要用途又不一样,json 主要是方便传输数据,yaml 主要是配置文件,两个方向都不同怎么替代
|
62
3dwelcome 2021-08-07 12:49:18 +08:00
textures/bwhtest/foo
{ // draw the lightmap first { map $lightmap rgbGen identity } // modify the lightmap in the framebuffer by // a highly compressed detail texture { map textures/details/detail01.tga blendFunc GL_DST_COLOR GL_SRC_COLOR // YOU MUST USE THIS!! detail // for the detail to be disabled, this must be present tcMod scale 9.1 9.2 } // now slap on the base texture { map textures/castle/blocks11b.tga blendFunc filter } } 这是 20 年前的古人写的 quake3 配置文件,1999 年的主流游戏,后来开源,时间线一点不夸张。 怎么看都有清晰的注释和层级结构,不比 json 差很多(重点是没有逗号!) 之所以 JSON 那么火,就仅仅是因为它是 Javascript 的原生对象,没别的理由了。 |