【问题标题】:Is JSON a string?JSON是字符串吗?
【发布时间】:2019-06-04 23:41:43
【问题描述】:

我的问题是,JSON 在技术上是一个字符串吗?我了解数据是通过文本格式在互联网上传递的。那么,文本格式是指字符串吗?我有一次采访,其中我说 JSON 基本上是一个字符串,我真的被它炸毁了。文本格式不是字符串吗?我们总是对对象进行字符串化并将其作为 JSON 发送,对吗?那么,它不会使 JSON 成为字符串吗?

我在谷歌上找不到任何明确的答案,说明 JSON 是一个字符串。到处都说它是文本格式。

【问题讨论】:

  • 您将通过此链接获得最佳知识json.org
  • JSON.stringify 返回一个 JSON 字符串,但单独的“JSON”仅表示表示数据的文本格式。您还可以流式传输 JSON 数据或将其放入文件中,我不会将其称为“字符串”。
  • 嗯是的。每个人都会说“这是一个标准”。 .但它是一个字符串。就这么简单。
  • 字符串是文本在 JavaScript 中映射到的类型。所以答案是肯定的和否定的。是的,它是一个字符串,因为这就是 JS 中文本的表示方式。不,这只是它的文本在 JavaScript 中的表示方式,而不是通用的(尽管在其他语言中很常见)。
  • “...以 JSON 格式发送” - 不,我们从不发送任何“以 JSON 格式”发送的内容,因为 JSON 是一种标准,因此名称中包含“符号”一词。相反,我们以“JSON”形式发送它们——我们根据 JSON 格式将对象编码为字符串。

标签: javascript json


【解决方案1】:

问:JSON 是字符串吗?

答:不,这是一个标准。

然而,我们通过http 协议通过编码或原始string 传输此格式,然后使用JSON.parse 之类的API 在进程内存中创建此表示作为键值对对象。

【讨论】:

  • 严格来说,引用“字符串”作为数据类型(在 Java、Python、PHP 等语言中被视为“字符串”的字符范围内)... JSON 确实是字符串.通过在编程语言(如 Java)中加载到“字符串”数据类型来证明这一点。它可以正常工作,因此符合“字符串”数据类型限制。例如,JWE 等许多“标准”也是“字符串”,base64 是“字符串”等。在 JavaScript 中,JSON.stringify() 和 JSON.parse() 函数无缝地音译任何有效的 JSON,将“字符串”转换为一个“对象”(在 JavaScript 中)并再次返回。
【解决方案2】:

JSON 是一种基于文本的数据格式,遵循 JavaScript 对象语法。 JSON 以 string 的形式存在 — 当您想通过网络传输数据时很有用。当您要访问数据时,需要将其转换为原生 JavaScript 对象。

此信息取自 MDN 文档,请参阅它以供参考: https://developer.mozilla.org/en-US/docs/Learn/JavaScript/Objects/JSON https://www.w3schools.com/js/js_json_intro.asp

【讨论】:

  • 这个答案其实是最简洁正确的一个。这里有一个简化讨论的理由:什么是或不是“字符串”数据类型?在大多数任何编程语言中,它都基于一系列允许的字符。 PNG 图像不能作为“字符串”加载,除非它是 base64 编码的(这是一个字符串)。此 JSON 是一个字符串:{}
  • 好的和令人信服的答案。
【解决方案3】:

JSON 只是一种格式,既不是字符串也不是对象。通常,JSON 字符串是用来交换数据的。但是要访问数据,我们必须将 JSON 字符串解析或转换成 javascript 对象

如果我们从代码本身来看这个概念会更清楚。 下面的代码是目前的javascript,虽然我们也可以在其他语言中使用JSON。

/*Lets say server want to send the variable 'a' which is a 
 JSON String*/
a = ‘{“name”:”HELLO”, “age”: 2000}’;

/*When a client want to use this data,first it will have to 
  convert 'JSON string' into an object.We can do that using 
  JSON.parse().*/

b = JSON.parse(a);

/*Now b become an object and now it is ready to be used and it 
looks like: {“name”:”HELLO”,“age”:2000}. Notice it is not quoted 
anymore like in JSON string above. */
console.log(b["name"]); //this would display HELLO.

【讨论】:

  • 如果没有在现有答案上添加任何新内容,请避免添加答案
  • @sinanspd 我没有看到任何地方提到的实例概念!
【解决方案4】:

JSON 不是字符串

它是一种用于多域之间数据交换的语言,JSON 基本上是 YAML 的一个子集,也是各方之间交换数据的一种方式。

数据交换:数据交换是将在源模式下结构化的数据转换为在目标模式下结构化的数据的过程,以便目标数据是源数据的准确表示。 对于转换数据,当然,您需要一个解析器,您可以在其中证明数据模式对于计算机程序是否正确。

【讨论】:

  • JSON 不是 YAML 的子集。正如json.org 所说“它基于 JavaScript 编程语言标准 ECMA-262 第 3 版 - 1999 年 12 月的一个子集。
  • JSON (JavaScript Object Notation) - 不是“语言”。它是字符串格式的“符号”(键是字符串,分隔符(:)是字符串,引号是字符串的一部分,值是字符串,封装({}{})都是字符串。它没有逻辑,因此不是一种“语言”本身,因为人们可以定义一种“计算机语言”。更多的是字符串格式的“数据结构”(就像 XML 一样)。
【解决方案5】:

从数据的上下文来看 - JSON 不是字符串。它表示键值对中的数据。它遵循自己的验证策略。它有自己的一套规则。

如果您的上下文是关于如何通过网络传输的,HTTP 通常会将其转换为@samuel-toh 指定的原始字符串。

即使在您的代码中(如果您使用的是 Javascript),您也可以通过调用将其转换为字符串:

JSON.stringify(yourJSONObject);

并且可以通过调用将其转换回可编程的Javascript对象

JSON.parse(stringifiedJSON);

所以回答你的问题:

不,JSON 不是字符串。这是一个数据结构。

编辑: 请不要混淆 Javascript 对象和 JSON。他们是不同的。我上面指定的方法将 Javascript 对象作为参数。我在回答中试图暗示的是 JSON 是一种与语言无关的数据交换格式。 (这不是我的声明,它是在 here 找到的。) p>

JSON 和 Javascript 对象有几个不同之处,就像@t-niese 指出的那样,Javascript 对象可以将函数作为值。一个有效的 Javascript 对象可能是一个无效的 JSON,尽管一个有效的 JSON 将是一个有效的 Javascript 对象。如果我造成任何混乱,请原谅我。

【讨论】:

  • JSON.stringify 将 JavaScript 对象作为输入,而不是 JSON 对象。 JavaScript 中没有 JSONObject 那样的东西,JavaScript 对象可以将函数作为值保存,可以有循环引用、定义的属性……而这些东西不能用 JSON 来表示。
  • 没有“可编程 JSON”。你在谈论一个 JavaScript 对象。 JSON 是它的文本序列化。当您在 JS 中有 obj = {name: "Fred"} 时,您使用 JSON。然后它会回过头来解释为什么“JSON 对象”是用词不当。您在谈论文本序列化数据....对象?它比“PIN 码”更没有意义,因为这只是一个重言式,而“JSON 对象”是两个不同的概念,它们被传递到一个中。这是一个矛盾的说法。
  • JSON 绝对不是数据结构。这是一种序列化格式。这就像说 CSV 是一种数据结构,但它显然不是。
  • 公平的一点是(在 JavaScript 中)一个对象不是(只是)一个字符串(在线上的 JSON)。然而,在 cmets 中指出的其余部分是非常有争议的。 JSON 可以作为纯文本 MIME 类型存在并且完全有效,无需转换即可验证。它是一种基于文本的数据结构,就像 CSV 是一种“基于文本的数据结构”一样——只是具有不同的分隔符(尽管 JSON 更丰富地支持嵌套、某些数据类型等)。
猜你喜欢
  • 1970-01-01
  • 2015-01-11
  • 1970-01-01
  • 2022-12-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-26
  • 2013-02-13
相关资源
最近更新 更多