我希望能够将外部变量解析为JSON对象。
这样的事情可以做到:
var username = "zvincze";
使用该变量解析JSON对象:
var json = '{"username":"VARIABLE_GOES_HERE"}'
var obj = JSON.parse(json);
这是一个非常简单的问题,我似乎无法弄清楚。事实上,我甚至不知道是否有办法真正实现这样的事情。
答案 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.stringify
和JSON.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 + '"}';
快乐的编码......