首页 > 解决方案 > 这种 JSON 格式模式是否有名称,并带有前导逗号?

问题描述

我见过这样写的有效 JSON:

{ "version": 1
, "object":
  { "one": 1
  , "two": 2
  , "three": 3
  , "four": 4,
  , "five": 5
  }
, "array":
  [ 1
  , 2
  , 3
  ]
, "people":
  [ { "firstname": "Jacob",
    , "lastname": "Ford"
    }
  , { "firstname": "Marcin"
    , "lastname": "Wichary"
    }
  ]
}

我对主要优势的猜测是,添加或删除一行数据(除了少数例外)将被区分为:单行添加或删除。与更典型的 JSON 表示相反,带有尾随逗号,其中将项目附加到数组或对象的末尾需要编辑它之前的行以添加逗号。

这个 JSON 表示约定是否有名称,前导逗号,逗号与左/右括号放在同一列中?

标签: jsonserializationformattingindentation

解决方案


它似乎通常被称为逗号优先表示法(尽管有时也称为前导逗号表示法),并且不仅仅适用于JSON。SQL 命令是另一个很好的例子

npm 的代码风格指南要求它用于所有逗号分隔的列表。Airbnb的禁止它。

我对这种风格产生更清晰差异的假设是正确的。然而,有些人更喜欢通过使用尾随逗号来实现相同的目标,但总是在最后一项之后包含一个(不必要的)悬空逗号。前面提到的 Airbnb 代码风格指南,在禁止逗号优先符号之后的部分中,需要在列表后悬挂逗号,明确用于更清晰的差异。

支持者指出的另一个优点是,印刷错误在逗号优先表示法中变得更加明显。npm 的发明者的这个要点经常被引用,我将在此摘录:

// error in standard style
var a = "ape",
  b = "bat",
  c = "cat",
  d = "dog"
  e = "elf",
  f = "fly",
  g = "gnu",
  h = "hat",
  i = "ibu";

// error in comma-first style
var a = "ape"
  , b = "bat"
  , c = "cat"
  , d = "dog"
  e = "elf"
  , f = "fly"
  , g = "gnu"
  , h = "hat"
  , i = "ibu"
  ;

推荐阅读