V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
find456789
V2EX  ›  问与答

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

  •  1
     
  •   find456789 · Aug 6, 2021 · 7008 views
    This topic created in 1727 days ago, the information mentioned may be changed or developed.

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

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

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

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

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

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

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

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

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

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

    yaml 才是适合配置文件的格式,面向的是“人”。它不需要逗号,不需要引号,方便编辑。而且换行缩进增强了可读性。
    airyland
        49
    airyland  
       Aug 6, 2021
    @Trim21 应该说取决于解析实现,大多数情况下可能只是 warning 不是 error,不鼓励有重复 key 。js 中只会取后者的值。

    https://stackoverflow.com/questions/21832701/does-json-syntax-allow-duplicate-keys-in-an-object/23195243#23195243
    chaleaoch
        50
    chaleaoch  
       Aug 6, 2021   ❤️ 2
    我去谢谢楼主, 我一直没想明白为什么 yaml 比 json 对人类友好.
    现在知道了 至少原因之一是因为 json 不让注释啊...
    binux
        51
    binux  
       Aug 7, 2021 via Android
    @ipwx 不是说缩进容易错,而是 yaml 类型假设和各种复杂的语法同意错吧,而且你还不一定知道错了
    binux
        52
    binux  
       Aug 7, 2021 via Android
    @yimity 你这叫做 js 不叫 JSON,JSON 标准中是不允许注释的,你的能用只是恰好 JSON 是符合 js 语法的罢了

    https://stackoverflow.com/q/244777
    binux
        53
    binux  
       Aug 7, 2021 via Android
    @yimity 哦不好意思没看到你把它放进 key 了。。那如果有多个注释怎么办?
    szzhiyang
        54
    szzhiyang  
       Aug 7, 2021
    没有。
    NXzCH8fP20468ML5
        55
    NXzCH8fP20468ML5  
       Aug 7, 2021 via Android
    toml
    iseki
        56
    iseki  
       Aug 7, 2021 via Android
    也许 yaml 等格式可以替代下? json 不支持注释和末尾逗号,都是巨坑。但是 yaml 的缩进对眼睛要求有点高也挺难受的…
    EscYezi
        57
    EscYezi  
       Aug 7, 2021 via iPhone
    xml 还没被淘汰呢,别说 json 了 2333
    HankLu
        58
    HankLu  
       Aug 7, 2021
    为什么要淘汰 json ?
    NilChan
        59
    NilChan  
       Aug 7, 2021 via Android
    yaml 就算了吧,反人类的东西
    ikaros
        60
    ikaros  
       Aug 7, 2021
    toml yaml 层级肉眼看瞎
    lovelive1024
        61
    lovelive1024  
       Aug 7, 2021
    json 和 yaml 的主要用途又不一样,json 主要是方便传输数据,yaml 主要是配置文件,两个方向都不同怎么替代
    3dwelcome
        62
    3dwelcome  
       Aug 7, 2021
    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  
       Aug 8, 2021
    @binux
    {
    "//注释 A" : "a",
    "a" : "a",
    "//注释 B" : "b",
    "b" : "b"
    }
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   2039 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 155ms · UTC 16:14 · PVG 00:14 · LAX 09:14 · JFK 12:14
    ♥ Do have faith in what you're doing.