您需要仔细区分 JSON 和 JavaScript 对象。它们是完全不同的两件事。
JSON 是一种独立于语言、基于字符的数据表示,用于数据交换。例如,如果您要向服务器发送数据,它需要采用字符串形式,因此您需要将数据转换为 JSON。如果您从服务器接收数据,并且它是 JSON 格式,则需要将其转换为 JavaScript 对象,以便在您的 JavaScript 程序中使用它。
JSON 实际上与 JavaScript 无关。例如,JSON 可以用作 Java 程序交换数据的基于字符串的数据表示。 Java 和几乎所有其他语言都提供了自己的库例程,用于将其原生数据转换为 JSON,反之亦然。
JSON 和 JavaScript 中使用的 JavaScript 对象之间的唯一关系是 JSON 字符串 看起来 很像 JavaScript 对象字面量,但有一些额外的限制,例如键必须被引用,它不能保存某些数据类型,例如函数,并且它不能保存循环引用。
“JSON”中的“JS”部分并不表示 JSON 是一种基本的 JavaScript 数据结构,也不表示 JSON 在 JavaScript 中用于表示或操作数据。这仅仅是因为,如上所述,JSON 字符串的格式松散地模仿 JavaScript 对象文字的格式。
在普通的日常 JavaScript 编程中,您永远不会使用 JSON,也无需担心它。正如我所说,当您将数据发送到某个地方或从某个地方接收数据时,您将需要担心 JSON,only 需要 JSON 作为数据格式。当然,在进行 ajax 调用时就是这种情况,但实际上,即使那样,如果你告诉它正确的类型,jQuery 的 $.ajax 会自动将数据与 JavaScript 对象相互转换,即使在这种情况下你通常也不需要担心 JSON。
请注意,JSON 可以表示原始值,而不仅仅是 JavaScript 对象。例如,"1" 是代表数字 1 的有效 JSON。
据我了解您的问题,您想创建一个 JavaScript 对象(不是 JSON),其中包含变量 username 的值作为其值之一。在这种情况下,您使用常规的旧 JavaScript 对象文字格式创建一个 JavaScript 对象
{username: username}
这意味着,创建一个对象,具有一个名为 "username" 的单个键(如果你愿意,请引用它),其值是变量 username 的值。同样,除非您打算将此对象发送到需要 JSON 字符串表示的地方,否则在这种情况下甚至不需要考虑 JSON。
理论上,是的,正如一个答案所建议的那样,您可以使用'{"username":"' + VARIABLE_GOES_HERE + '"}' 之类的字符串算术创建一个值为username“插值”的JSON 字符串,然后使用@ 将该JSON 字符串转换为JavaScript 对象987654329@。但是,当您可以简单地将 JavaScript 对象编写为普通的 JavaScript 对象字面量时,绝对没有理由跳过这些环节。
另一个答案显示了一种定义常规 JavaScript 对象的方法,然后使用 JSON.stringify 将其转换为 JSON。但是,在您的情况下,除非您打算将对象发送到某个地方,否则无需执行此操作。
另一个答案显示了一种定义常规 JavaScript 对象的方法,然后将其字符串化为 JSON 字符串,然后立即将其解析回 JavaScript 对象,该对象与您在字符串化和解析之前开始使用的对象完全相同。完全没有必要这样做。
人们看到不少关于 SO 试图以某种方式在 JSON 中操作、搜索或替换的问题,例如使用正则表达式。几乎没有任何情况下您甚至需要考虑做这样的事情。 JSON 有两个基本操作:将值转换为 JSON,以及将 JSON 转换为值。这两者都以JSON.stringify 和JSON.parse 的形式内置于语言中,它们以绝对的可靠性和性能完成它们的工作。如果出于某种原因您需要修改 JSON 字符串格式的数据,请不要操作该字符串;您需要做的就是将其解析为 JavaScript 值,操作该值,然后将其转换回 JSON。
不幸的是,由于未知原因,许多正在学习该语言的 JavaScript 程序员,包括许多在 SO 上发布问题的人,都产生了 JSON 是 JavaScript 对象的误解,或者他们必须考虑 JSON 以及字符串化和解析以处理普通的旧 JavaScript 对象,这在很大程度上是不是的。
次要问题,但您在问题中使用了“解析”一词。我看到越来越多的人出于某种原因使用这个词来表示“访问”或“检索”或“提取”。实际上,“解析”有一个非常具体的含义:将基于字符串的信息表示(例如程序或数据对象),根据特定的语法分析成某种合适的计算机友好形式以供进一步处理。 JSON.parse 所做的是在这个意义上进行解析,因为它正在根据 JSON 语法将基于字符串的信息表示分析成 JavaScript 对象以供进一步处理。