如何将变量解析为JSON对象(Javascript)

时间:2015-12-24 02:44:47

标签: javascript json variables

我希望能够将外部变量解析为JSON对象。

这样的事情可以做到:

var username = "zvincze";

使用该变量解析JSON对象:

var json = '{"username":"VARIABLE_GOES_HERE"}'
var obj = JSON.parse(json);

这是一个非常简单的问题,我似乎无法弄清楚。事实上,我甚至不知道是否有办法真正实现这样的事情。

5 个答案:

答案 0 :(得分:0)

我认为你所做的事情有点奇怪。您创建的对象是json(JavaScript Object Notation)。

var obj = {};
obj.username = "zvincze";

//obj is now json
var str = JSON.stringify(obj);
//str == {'username':'zvincze'}

JSON.parse(obj)应该失败,因为obj已经是json。

答案 1 :(得分:0)

您需要仔细区分JSON和JavaScript对象。它们是两个完全不同的东西。

JSON是一种与语言无关的基于字符的数据表示,用于数据交换。例如,如果要将数据发送到服务器,则需要采用字符串形式,因此您需要将数据转换为JSON。如果您从服务器接收数据并且它是JSON格式,则需要将其转换为JavaScript对象,以便在JavaScript程序中使用它。

JSON实际上与JavaScript无关。例如,JSON可以用作交换数据的Java程序的基于字符串的数据表示。 Java和几乎所有其他语言都提供了自己的库例程,用于将其本机数据转换为JSON,反之亦然。

JavaScript中使用的JSON和JavaScript对象之间的唯一关系是JSON字符串看起来像很像JavaScript对象文字,还有一些额外的限制,例如必须引用键,它不能保留某些数据类型,例如函数,并且它不能保存循环引用。

" JS" " JSON"的一部分并不表示JSON是基本的JavaScript数据结构,或者JSON在JavaScript中用于表示或操作数据。它只是来自这样一个事实:如上所述,JSON字符串的格式是在JavaScript对象文字的格式之后松散建模的。

在正常的日常JavaScript编程中,您永远不会使用JSON,也不必担心它。正如我所说,当您将数据发送到某个地方或从某处接收数据时,您需要担心JSON ,这需要JSON作为数据格式。当然,在进行ajax调用时就是这种情况,但实际上,即便如此,因为jQuery的$.ajax会自动将数据转换为JavaScript对象和从JavaScript对象转换数据,即使在这种情况下也是如此。你通常不需要担心JSON。

注意JSON可以表示原始值的方式,而不仅仅是JavaScript对象。例如,"1"是有效的JSON,表示数字1。

正如我理解你的问题,你想创建一个JavaScript对象(而不是JSON),它包含变量username的值之一。您可以使用常规的旧JavaScript对象文字格式创建JavaScript对象,在本例中为

{username: username}

这意味着,使用名为"username"的单个键创建一个对象(如果您愿意,请引用它),其值是变量username的值。同样,除非您计划将此对象发送到需要JSON字符串表示的位置,否则在这种情况下甚至不需要考虑JSON。

理论上,是的,正如一个答案建议的那样,您可以创建一个值为username"插入"的JSON字符串,使用字符串算法如'{"username":"' + VARIABLE_GOES_HERE + '"}',然后转换使用JSON.parse将JSON字符串转换为JavaScript对象。但是,当您可以简单地将JavaScript对象编写为普通的JavaScript对象文字时,绝对没有理由跳过这些箍。

另一个答案显示了一种定义常规JavaScript对象的方法,然后使用JSON.stringify将其转换为JSON。但是,在您的情况下,除非您计划将对象发送到某处,否则无需执行此操作。

另一个答案显示了一种定义常规JavaScript对象的方法,然后将其字符串化为JSON字符串,然后立即将其解析回JavaScript对象,这将与字符串化和解析之前完全相同。绝对没有必要这样做。

在使用正则表达式时,人们会看到关于SO试图以某种方式操纵或搜索或替换JSON中的问题。几乎没有任何情况你甚至需要考虑做这样的事情。 JSON有两个基本操作:将值转换为JSON,并将JSON转换为值。这两者都以JSON.stringifyJSON.parse的形式构建到语言中,以绝对的可靠性和性能完成工作。如果由于某种原因你需要修改JSON字符串格式的数据,不要操纵字符串;您需要做的就是将其解析为JavaScript值,操纵值,然后将其转换回JSON。

不幸的是,由于未知的原因,许多正在学习该语言的JavaScript程序员,包括许多在SO上发布过问题的程序员,已经发现了JSON 是一个JavaScript对象的错误认知,或者他们必须考虑JSON以及字符串化和解析以处理普通的旧JavaScript对象,这非常

小点,但你使用术语"解析"在你的问题。我看到越来越多的人出于某种原因使用这个词来表示"访问"或"检索"或者"提取"。实际上,"解析"具有非常特定的含义:根据特定语法分析基于字符串的信息表示(例如程序或数据对象),进入一些合适的计算机友好形式以供进一步处理。在这个意义上,JSON.parse 解析,因为它正在根据JSON语法将基于字符串的信息表示分析为JavaScript对象以供进一步处理。

答案 2 :(得分:-1)

不要乱用连接var json = '{"username":"'+ userName +'"}',你可以:

var ob = {};              // or simply: var ob = {username:"zvincze"};
ob.surname = "Zvincze";
ob.name    = "Zachary";
ob.id      = "5182842";

var json = JSON.stringify(ob);
var obj = JSON.parse(json);

https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/JSON
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify

答案 3 :(得分:-1)

var json = JSON.stringify({username:"zvincze"})

答案 4 :(得分:-1)

您可以简单地连接下面的字符串......

var json = '{"username":"' + VARIABLE_GOES_HERE + '"}'

在你的情况下:

var username = "zvincze";  
var json = '{"username":"' + username + '"}';

快乐的编码......