我无法理解JSON.parse的行为.JSON.parse应该只适用于字符串.但是,如果字符串只包含数字,则它似乎适用于只包含一个字符串(甚至单引号)的array.

JSON.parse(['1234']) // => 1234
JSON.parse(['1234as']) // => throws error
JSON.parse(['123', '123']) // => throws error

推荐答案

正如您已经指出的,JSON.parse()需要的是字符串而不是array.但是,当给定数组或任何其他非字符串值时,该方法将自动将其强制为字符串并继续进行,而不是立即引发.从spec:

  1. 让JText成为字符串(text).
  2. ...

数组的字符串表示形式由其值组成,用逗号分隔.所以

  • String(['1234'])返回'1234'
  • String(['1234as']) returns '1234as', and
  • String(['123', '123'])返回'123,123'.

请注意,字符串值不会再次被引用.这意味着['1234'][1234]都转换为相同的字符串'1234'.

So what you're really doing is:

JSON.parse('1234')
JSON.parse('1234as')
JSON.parse('123,123')

1234as and 123,123 are not valid JSON, and so JSON.parse() throws in both cases. (The former isn't legal JavaScript syntax to begin with, and the latter contains a comma operator that doesn't belong.)

另一方面,1234是数字文字,因此是有效的JSON,表示其自身.这就是JSON.parse('1234')(扩展JSON.parse(['1234']))返回数值1234的原因.

Json相关问答推荐

中间初始化的Jolt配置

通过在织女星简化图上裁剪来显示文本

如何在Haskell中解析JSON,其中字段的名称可以是多个值之一,但应该转换为单个Haskell类型?

在Ansible中从json中提取特定数据

数据到jsonObject到数据到 struct 是可能的吗?

NoneType 对象的 Python 类型错误

将boost::beast::multibuffer转换为std::istream

jq - 仅在键值对存在的地方打印值

使用jq根据对象中键的值查找对象

如何将复杂的 JSON 反序列化为 Rust 类型?

我如何将 JSON 格式与 flutter 一起使用?帮助使用 Gamebanana api

转义 Haskell 记录的字段

当值包含ansible中的字符串时解析json值

如何配置spring mvc 3在json响应中不返回null对象?

缺少所需的请求正文内容:org.springframework.web.method.HandlerMethod$HandlerMethodParameter

从ruby中的json获取特定的键值

Spring MVC控制器中的JSON参数

使用 jq,将对象数组转换为具有命名键的对象

从 Json 对象 Android 中获取字符串值

java.lang.BootstrapMethodError:调用站点#4 bootstrap 方法的异常,初始化 retrofit 时