【问题标题】:Is a single string value considered valid JSON? [duplicate]单个字符串值是否被视为有效 JSON? [复制]
【发布时间】:2012-10-30 09:12:30
【问题描述】:

您是否考虑 JSON 网络响应:

"A serialization error occurred"

是否有效?

Some validators accept it 而其他人则没有。

【问题讨论】:

  • 你在说什么回应?你能分享一下吗?
  • 我指的是单个字符串值:“发生序列化错误”
  • 确保您的字符串使用引号 ("") 进行转义,即不仅仅是 A serialization error occurred,而是 "A serialization error occurred"

标签: json


【解决方案1】:

我不在乎是否有验证者接受它。这是不对的。这是一个良好实践的问题,Json 格式必须是{"key": "value", .....}。如果您认为该文本 Json 可以工作,但对于其他程序员来说,这不是一个严肃的 Json。如果只使用该文本,则不需要 Json。

【讨论】:

  • 没那么简单。新规范将单个值视为有效的 JSON。
  • 考虑 JSON API 的情况,这是一种非常常见的情况。返回 404 或其他错误时,该值应如何在您的世界中编码?我还建议“严重的 Json”(您的意思是“严重的 JSON”?)是 JSON 规范所定义的。对于 Internet 和内容类型 application/json 是 RFC-7159 (tools.ietf.org/html/rfc7159),它允许纯字符串,特别是:“JSON-text = ws value ws [...] JSON value 必须是一个对象、数组、数字或字符串,或以下三个文字名称之一:false null tr​​ue"。
【解决方案2】:

来自RFC4627

A JSON text is a serialized object or array.
    JSON-text = object / array

IE,根元素必须是对象或数组,本身不能是字符串值。

【讨论】:

    【解决方案3】:

    根据http://www.json.org/ 中公开的语法(引用Standard ECMA-262 3rd Edition - December 1999 par.5.1.5 JSON 语法)是错误的:

    初始元素必须是:

    然后一个值可以是一个字符串:

    【讨论】:

    • 嗨,托尼,我也曾查阅过那个页面,我也有同样的理解。但我想问问社区,因为一些网站(比如我作为参考的网站)将单个字符串值视为有效的 json 响应。看到这里的回复只是确认这是没有意义的。
    • 我试过那个网站,我同意你的看法,这似乎有误导性。通常我使用jsonlint.com,它不接受字符串作为有效的 JSON:“第 1 行解析错误:“ciao”^ Expecting '{', '['”。错误消息很清楚:它需要一个对象或数组。
    【解决方案4】:

    对于新的JSON RFC,json,只包含单个值是非常有效的。

    JSON 文本是一个序列化值。请注意,某些先前的 JSON 规范将 JSON 文本限制为对象或数组。

    【讨论】:

    • 是的,它是有效的。请注意,为了更好的互操作性,您可以返回单个元素数组:[ "value" ]
    【解决方案5】:

    RFC4627RFC7159 之间对此有所改变:

    RFC4627

    JSON 文本是一个序列化的对象或数组。

      JSON-text = object / array
    

    RFC7159

    JSON 文本是一个序列化值。请注意,某些以前的
    JSON 规范将 JSON 文本限制为对象或
    大批。仅生成对象或数组的实现,其中 a
    在所有
    实现将接受这些作为符合 JSON 文本。

      JSON-text = ws value ws
    

    没有为这种改变主意提供任何哲学或实践理由。较早的版本可能更有意义,因为它始终要求包含单个列表元素和单个映射元素(一对或元组)。第二个版本只允许不包含单个列表元素。

    【讨论】:

      猜你喜欢
      • 2011-11-21
      • 1970-01-01
      • 1970-01-01
      • 2019-08-04
      • 1970-01-01
      • 2013-02-13
      • 1970-01-01
      • 2023-03-30
      • 1970-01-01
      相关资源
      最近更新 更多