JSON命名是否有标准?我看到大多数使用由下划线(lower_case)分隔的小写的示例。但是,你可以使用PascalCase或camelCase吗?
答案 0 :(得分:319)
在本文档中Google JSON Style Guide(有关在Google上构建JSON API的建议),
建议:
属性名称必须为 camelCased ,ASCII字符串。
第一个字符必须是字母,下划线(_)或美元符号($)。
示例:
{
"thisPropertyIsAnIdentifier": "identifier value"
}
我们的团队使用此惯例。
答案 1 :(得分:195)
没有SINGLE标准,但我看到你提到的3种风格(“Pascal / Microsoft”,“Java”(camelCase
)和“C”(下划线,snake_case
)) - 以及至少还有一个,kebab-case
喜欢longer-name
)。
它似乎主要取决于相关服务的开发人员的背景;具有c / c ++背景的那些(或采用类似命名的语言,包括许多脚本语言,ruby等)通常选择下划线变体;类似地(Java vs .NET)。例如,提到的Jackson库假定Java bean命名约定(camelCase
)
更新:我对“标准”的定义是单一惯例。因此,虽然有人可以声称“是的,有很多标准”,但对我来说有多个Naming Conventions
,其中没有一个是“标准”。其中一个可以被认为是特定平台的标准,但是考虑到JSON用于平台之间的互操作性,这可能会或可能没有多大意义。
答案 2 :(得分:132)
no standard naming of keys in JSON 。
强加JSON命名约定非常令人困惑。但是,如果将其分解为组件,可以很容易地找到它。
用于生成JSON的编程语言
JSON本身没有标准的密钥命名
用于解析JSON的编程语言
snake_case 仍然有意义,因为现有的Java JSON库只使用方法来访问密钥而不是使用标准 dot.syntax 。这意味着与其他可以执行 dot.syntax 的编程语言相比,Java访问 snake_cased 键不会造成太大的伤害。
Java的示例 org.json
包
JsonObject.getString("snake_cased_key")
Java的示例 com.google.gson
包
JsonElement.getAsString("snake_cased_key")
为JSON实现选择正确的JSON命名约定取决于您的技术堆栈。在某些情况下,可以使用 snake_case , camelCase 或任何其他命名约定。
要考虑的另一件事是JSON生成器与JSON解析器和/或前端JavaScript的权重。通常,应该在JSON生成器端而不是JSON-parser端放置更多权重。这是因为业务逻辑通常驻留在JSON生成器端。
此外,如果JSON-parser端未知,那么您可以声明什么对您有用。
答案 3 :(得分:15)
值得注意的是,对于NodeJS,如果我正在使用数据库并且我的字段名称是下划线,我也会在结构键中使用它们。
这是因为db字段有很多首字母缩写词/缩写词,所以像 appSNSInterfaceRRTest 这样的东西看起来有些乱,但 app_sns_interface_rr_test 更好。
在Javascript变量中,所有camelCase和类名(构造函数)都是ProperCase,因此您可以看到类似
的内容var devTask = {
task_id: 120,
store_id: 2118,
task_name: 'generalLedger'
};
或
generalLedgerTask = new GeneralLedgerTask( devTask );
当然在JSON键/字符串中用双引号括起来,但是你只需要使用JSON.stringify并传入JS对象,所以不用担心。
我一直在努力解决这个问题,直到我在JSON和JS命名约定之间找到了这个愉快的媒介。
答案 4 :(得分:9)
似乎有足够多的变化让人们不顾一切地允许从所有约定转换为其他约定:http://www.cowtowncoder.com/blog/archives/cat_json.html
值得注意的是,提到的Jackson JSON解析器更喜欢bean_naming
。
答案 5 :(得分:1)
我认为JSON没有正式的命名约定,但您可以关注一些行业领导者,看看它是如何运作的。
Google是全球最大的IT公司之一,拥有JSON风格指南:https://google.github.io/styleguide/jsoncstyleguide.xml
利用这一点,您可以在此处找到其他Google风格指南:https://github.com/google/styleguide
答案 6 :(得分:1)
正如其他人所说,没有标准,因此您应该自己选择一个。这样做时需要考虑以下几点:
如果您使用JavaScript来使用JSON,则对这两个属性使用相同的命名约定将提供视觉一致性,并且可能会提供一些更干净的代码重用机会。
避免出现烤肉串情况的一个小原因是连字符可能与值中出现的-
字符在视觉上发生冲突。
{
"bank-balance": -10
}