是字符串无效的json对象?

时间:2018-08-30 12:58:52

标签: json string

我有一个问题,但找不到任何相关文档。 JSON的字符串无效对象吗?

例如,您可以在任何浏览器中执行此操作: JS:

console.log(JSON.parse(JSON.stringify("asdf")));

Java(杰克逊):

ObjectMapper mapper = new ObjectMapper();
String string = mapper.writeValueAsString("asdf");
TextNode node = (TextNode)mapper.readTree(string);
System.out.println(node.getTextValue());

PHP:

echo json_decode(json_encode("asdf"));

但是,正如我所看到的,此解析器无法将字符串用作根对象:

  1. http://json.parser.online.fr
  2. http://jsonparseronline.com

另外,来自SWIFT documentation-

  

顶级对象是NSArray或NSDictionary。

根据这个问题,从您的控制器(端点)返回json格式的字符串是否无效?

example.com/notes/2/title

1 个答案:

答案 0 :(得分:1)

根据https://jsonlint.com,“ asdf”是有效的JSON。一些解析器比其他解析器更严格。但是,您绝对不能将其用作其他任何数据的根,因为它只是一个字符串,而不是对象或数组。

话虽如此,如果您想要一个绝对的定义,请尝试阅读相关的RFC而不是特定编程语言的文档。据我所知,2017年12月的https://tools.ietf.org/html/rfc8259是最新的(在撰写此答案时)。

特别是https://tools.ietf.org/html/rfc8259#section-2

  

JSON文本是令牌序列。令牌集包括六个
  结构字符,字符串,数字和三个文字名称。

     

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

以后

  

这是三个仅包含值的小JSON文本:

   "Hello world!"

   42

   true

所以我假设提到的不同解析器正在实现规范的不同版本。