V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
find456789
V2EX  ›  问与答

未来会有什么格式会淘汰 json 吗?

  •  1
     
  •   find456789 · 2021-08-06 13:12:39 +08:00 · 6390 次点击
    这是一个创建于 1207 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我个人感觉 json 有一个很大的弊端就是 里面不能写注释

    有时候想给 package.json 加注释,不好加

    63 条回复    2021-08-08 22:14:15 +08:00
    constexpr
        1
    constexpr  
       2021-08-06 13:19:46 +08:00 via Android
    未来会有带注释的 json 吗?
    Geo200
        2
    Geo200  
       2021-08-06 13:21:21 +08:00
    @constexpr JSON5 了解一下
    keepeye
        3
    keepeye  
       2021-08-06 13:26:47 +08:00   ❤️ 3
    yaml/toml?
    ladypxy
        4
    ladypxy  
       2021-08-06 13:27:24 +08:00
    现在不是用 YAML 了么
    BeautifulSoap
        5
    BeautifulSoap  
       2021-08-06 13:29:27 +08:00 via Android
    yaml 的问题感觉在于,靠缩进,比 json 复杂,有时候手写 yaml 老出错
    3dwelcome
        6
    3dwelcome  
       2021-08-06 13:29:47 +08:00 via Android
    学 chrome,加个能注释的 DOM 结点,名字是#comment 开头,就不会有问题了。
    3dwelcome
        7
    3dwelcome  
       2021-08-06 13:35:08 +08:00 via Android
    @keepeye toml 不错啊,开眼界了。
    手写 json 怕漏逗号,手写 yaml 怕缩进问题。toml 完美弥补了这些问题。
    人类技术发展果然靠脑洞。
    ToPoGE
        8
    ToPoGE  
       2021-08-06 13:35:40 +08:00   ❤️ 3
    我投 toml 一票
    iamzuoxinyu
        9
    iamzuoxinyu  
       2021-08-06 13:35:40 +08:00 via Android
    YAML 不可能取代 json 。
    icy37785
        10
    icy37785  
       2021-08-06 13:43:09 +08:00 via iPhone
    json5 不是可以写注释了么
    ipwx
        11
    ipwx  
       2021-08-06 13:44:17 +08:00
    缩进有啥怕写错的
    qW7bo2FbzbC0
        12
    qW7bo2FbzbC0  
       2021-08-06 13:49:23 +08:00
    @constexpr #1 最开始的 json 允许注释,但被要求不能加注释,似乎有这样的都市传说
    EKkoGG
        13
    EKkoGG  
       2021-08-06 13:56:28 +08:00
    才知道 json 不能加注释。。。因为有一些项目加了注释好像也没影响
    wdssmq
        14
    wdssmq  
       2021-08-06 14:45:18 +08:00
    目前只遇到 VSCode 的配置项可以加注释。
    falcon05
        15
    falcon05  
       2021-08-06 14:51:56 +08:00
    我不喜欢 YAML,各种蛋疼,只有 json 能替代 json
    nutting
        16
    nutting  
       2021-08-06 14:53:25 +08:00
    以后应该不用人写代码了吧,所以是二进制序列化
    tghoul
        17
    tghoul  
       2021-08-06 14:55:24 +08:00   ❤️ 10
    JSON 设计之初就是为了做数据交换的呀,跟 Yaml Toml 这些为配置而生的语言设计理念都是不同的。JSON 加上注释我觉得反而是倒退。
    zxCoder
        18
    zxCoder  
       2021-08-06 15:04:21 +08:00
    @tghoul 只能说时代变了,js 一开始设计还只是能浏览器上运行的小脚本
    xupefei
        19
    xupefei  
       2021-08-06 15:17:53 +08:00 via iPhone
    不如来写 jsonnet
    yimity
        20
    yimity  
       2021-08-06 16:07:02 +08:00   ❤️ 3
    {
    "a": "a",
    "b": "b",
    "//这里是注释": "注释",
    "c":"c"
    }

    谁说 json 不支持注释。
    binaryify
        21
    binaryify  
       2021-08-06 16:49:24 +08:00
    jsonc 了解下
    Vegetable
        22
    Vegetable  
       2021-08-06 16:54:31 +08:00   ❤️ 2
    淘汰 json 和淘汰 package.json 是两回事
    suzic
        23
    suzic  
       2021-08-06 17:09:59 +08:00 via Android
    json 就不适合当配置用
    chenqh
        24
    chenqh  
       2021-08-06 17:16:13 +08:00
    @ipwx 缩进还是可怕的,因为肉眼看不出来 tab 和空格的区别
    CodeCodeStudy
        25
    CodeCodeStudy  
       2021-08-06 17:35:51 +08:00
    @ipwx 复制粘贴容易搞错
    ipwx
        26
    ipwx  
       2021-08-06 17:54:36 +08:00
    @chenqh 呃,绝对不用 tab 不就行了么。。。。这是铁律,无论什么时候都不用 tab 。
    gamexg
        27
    gamexg  
       2021-08-06 18:08:26 +08:00
    在可以选择时,
    我一直用 toml 做配置文件格式,觉得比 yaml 好用。
    jaon5 支持注释,共享配置时也挺方便。
    linqin003707
        28
    linqin003707  
       2021-08-06 18:09:14 +08:00
    protobuf
    Trim21
        29
    Trim21  
       2021-08-06 18:10:04 +08:00 via Android
    淘汰 json 作为配置文件
    Building
        30
    Building  
       2021-08-06 18:25:27 +08:00 via iPhone
    用 key-value 作为注释不就有注释了吗?
    chenqh
        31
    chenqh  
       2021-08-06 18:25:46 +08:00
    @ipwx 一不小心就用了, 我之前被这个 tab 卡了好久,
    Kaciras
        32
    Kaciras  
       2021-08-06 18:26:14 +08:00
    JSON 同时具备可读性和高信息密度,即能传输也能写配置,一会还真想不出来其它哪个能做到的。
    jim9606
        33
    jim9606  
       2021-08-06 18:32:19 +08:00
    淘汰是不可能的,xml 都还活得好好的。注释的话 json5 是无痛解决方案,顺带解决手撸 json 总少了引号逗号导致出错的烦恼。

    json 好就好在稍微新点的编程语言都直接在标准库包含 json 实现了,省去外部依赖的麻烦。
    uselessVisitor
        34
    uselessVisitor  
       2021-08-06 18:45:27 +08:00
    数据传输的还是 json 格式比较好,配置文件的话看什么类型了,像版本这种的还是 JSON/XML 处理的好一些,配置文件的话可以 yml
    Cbdy
        35
    Cbdy  
       2021-08-06 19:41:19 +08:00 via Android
    没有了,JSON 是完美的格式
    billlee
        36
    billlee  
       2021-08-06 21:03:25 +08:00
    感觉不可能了。细分领域可以有更先进的格式,但 JSON 会是那个默认选择。
    12101111
        37
    12101111  
       2021-08-06 21:08:57 +08:00
    toml 是标准化的 ini, 是用来做手写的配置文件的
    json 还是更接近机器读的东西, 但是偶尔又会有人来看一看. 看的人多了就应该选 toml, 真的没人看那就二进制格式得了.
    namelosw
        38
    namelosw  
       2021-08-06 21:16:29 +08:00
    比 JSON 复杂的,似乎都没啥必要,比如 XML

    比 JSON 看着简单的,比如 YAML,parse 起来都麻烦

    这些年看到有点意义的,可能就是 EDN 之类的。JSON 的类型写死了就那几种,比如 date,或者 set 之类的就不好指定消费者用什么 parser,然后就只能把类型写在数据里,EDN 就是可以制定一些额外的类型,然后请求的接收方可以针对可能出现的类型统一写 parser,比如日期或者 UUID 之类的,这样就少了很多手动转换的胶水代码。
    3dwelcome
        39
    3dwelcome  
       2021-08-06 21:23:25 +08:00 via Android
    @namelosw json 最大问题是逗号,你看别的 yml 和 toml 两个格式都没有逗号,都是用换行直接语义分割,就 json 有。
    airyland
        40
    airyland  
       2021-08-06 21:25:45 +08:00
    var a = {
    "a": "这是同字段注释",
    "a": "a"
    }
    cpstar
        41
    cpstar  
       2021-08-06 21:29:02 +08:00
    以数据来讲,除非 key-value 不管用,否则 json 无可替代的优势。
    但是以数据来讲,为啥要加注释?

    那加了注释,就不是数据维度了。而是 coding 编码的事情了,那不要说 json 不行,而是框架不行。
    namelosw
        42
    namelosw  
       2021-08-06 21:52:52 +08:00
    @3dwelcome 逗号的话随手就写上了,像 Rust 这种新生代语言还有分号…

    换行分割 parser 写起来就麻烦些,JSON 之所以这么流行,和 parser 好写有很大关系,任何一个新语言和 DSL 都可以很快地写出来一个 JSON 库

    真说比较影响使用的是没有注释,然后双引号之类的 escape 过于复杂等等
    Trim21
        43
    Trim21  
       2021-08-06 22:05:48 +08:00
    @airyland #40 都 var 了,直接用 js 的行注释不就好了。。。
    iyaozhen
        44
    iyaozhen  
       2021-08-06 22:26:39 +08:00
    我在想 json 不是被 pb 替代了么 原来说的是配置。。。
    airyland
        45
    airyland  
       2021-08-06 22:29:35 +08:00
    @Trim21 写快了,前面忽略,不影响 json 。
    searene
        46
    searene  
       2021-08-06 22:33:27 +08:00
    lisp 代码可以直接当成配置用
    Trim21
        47
    Trim21  
       2021-08-06 22:55:17 +08:00
    @airyland #45
    但你这例子不是一个合法的 json 啊,key 不能重复的
    weyou
        48
    weyou  
       2021-08-06 23:30:15 +08:00 via Android
    用法问题。json 格式本来就不是用于配置文件的,而是作为内部数据交换的,面向的是”机器“。它就不是给人手动编辑和阅读的一个格式,要啥注释?

    yaml 才是适合配置文件的格式,面向的是“人”。它不需要逗号,不需要引号,方便编辑。而且换行缩进增强了可读性。
    airyland
        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
    chaleaoch
        50
    chaleaoch  
       2021-08-06 23:48:07 +08:00   ❤️ 2
    我去谢谢楼主, 我一直没想明白为什么 yaml 比 json 对人类友好.
    现在知道了 至少原因之一是因为 json 不让注释啊...
    binux
        51
    binux  
       2021-08-07 00:15:17 +08:00 via Android
    @ipwx 不是说缩进容易错,而是 yaml 类型假设和各种复杂的语法同意错吧,而且你还不一定知道错了
    binux
        52
    binux  
       2021-08-07 00:20:06 +08:00 via Android
    @yimity 你这叫做 js 不叫 JSON,JSON 标准中是不允许注释的,你的能用只是恰好 JSON 是符合 js 语法的罢了

    https://stackoverflow.com/q/244777
    binux
        53
    binux  
       2021-08-07 00:21:26 +08:00 via Android
    @yimity 哦不好意思没看到你把它放进 key 了。。那如果有多个注释怎么办?
    szzhiyang
        54
    szzhiyang  
       2021-08-07 00:50:18 +08:00
    没有。
    NXzCH8fP20468ML5
        55
    NXzCH8fP20468ML5  
       2021-08-07 01:01:01 +08:00 via Android
    toml
    iseki
        56
    iseki  
       2021-08-07 01:42:19 +08:00 via Android
    也许 yaml 等格式可以替代下? json 不支持注释和末尾逗号,都是巨坑。但是 yaml 的缩进对眼睛要求有点高也挺难受的…
    EscYezi
        57
    EscYezi  
       2021-08-07 03:24:52 +08:00 via iPhone
    xml 还没被淘汰呢,别说 json 了 2333
    HankLu
        58
    HankLu  
       2021-08-07 04:10:49 +08:00
    为什么要淘汰 json ?
    NilChan
        59
    NilChan  
       2021-08-07 04:24:45 +08:00 via Android
    yaml 就算了吧,反人类的东西
    ikaros
        60
    ikaros  
       2021-08-07 09:05:03 +08:00
    toml yaml 层级肉眼看瞎
    ily433664
        61
    ily433664  
       2021-08-07 09:26:55 +08:00
    json 和 yaml 的主要用途又不一样,json 主要是方便传输数据,yaml 主要是配置文件,两个方向都不同怎么替代
    3dwelcome
        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 的原生对象,没别的理由了。
    yimity
        63
    yimity  
       2021-08-08 22:14:15 +08:00
    @binux
    {
    "//注释 A" : "a",
    "a" : "a",
    "//注释 B" : "b",
    "b" : "b"
    }
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5791 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 06:05 · PVG 14:05 · LAX 22:05 · JFK 01:05
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.