JavaScript Associateva数组-将字符串作为数组键:值对传递
我知道我可以创建如下关联数组:JavaScript Associateva数组-将字符串作为数组键:值对传递,javascript,string,key,associative-array,Javascript,String,Key,Associative Array,我知道我可以创建如下关联数组: var MyAssocArray = {'sky':'blue', 'grass':'green'}; var MyString = "'sky':'blue', 'grass':'green'"; 我非常喜欢用这种方法 我想做的事情和遇到的问题是: 我保存了如下字符串: var MyAssocArray = {'sky':'blue', 'grass':'green'}; var MyString = "'sky':'blue
var MyAssocArray = {'sky':'blue', 'grass':'green'};
var MyString = "'sky':'blue', 'grass':'green'";
我非常喜欢用这种方法
我想做的事情和遇到的问题是:
我保存了如下字符串:
var MyAssocArray = {'sky':'blue', 'grass':'green'};
var MyString = "'sky':'blue', 'grass':'green'";
我希望现在就能够做到这一点:
var MyAssocArray = {MyString};
当我尝试这样做时,我会出现以下错误:
invalid object initializer
我做错了什么?
我怎样才能做到这一点
我发现了一个使用PHP和JavaScript的不同解决方案。关联数组字符串将在JavaScript代码中回显:
var Multidimensional_Arr[Multidimensional_Array_Key_Name] = {<?php echo $String_Pulled_From_Database; ?>}; // i.e. 'sky':'blue', 'grass':'green'
// The same can be done for a one-dimensional array
var My_Single_Dime_Arr = {<?php echo $String_Pulled_From_Database; ?>}; // i.e. 'sky':'blue', 'grass':'green'
var多维数组[多维数组\u键\u名称]={};//i、 e.“天空”:“蓝色”,“草”:“绿色”
//对于一维数组也可以这样做
var My_Single_Dime_Arr={};//i、 e.“天空”:“蓝色”,“草”:“绿色”
使用——它是序列化的JavaScript对象表示法,非常接近您正在做的事情
你需要这样做
var MyAssocArray = JSON.parse(MyString);
此外,JSON使用双引号,而不是单引号;如果使用简单对象,您可能可以编写代码,将字符串中的“
”替换为“
”,但如果字符串包含双引号,则会很棘手
如果您使用的浏览器未实现JSON.parse(),则可以在JSON网站上使用该实现(请参阅),或者如果您使用的是jQuery,则会出现以下情况
警告:您的解决方案存在安全风险,除非您确定数据库中的数据已被清除:
var My_Single_Dime_Arr = {<?php echo $String_Pulled_From_Database; ?>}
var My_Single_Dime_Arr={}
这相当于调用eval()
;如果您的数据库字符串中有任何恶意代码,它可能会做坏事。这就是JSON被发明的原因之一——在评估之前,很容易确保其内容是有效的(因此是安全的)
正如您向我们介绍的那样,您的总体架构是[数据库中的数据]->服务器端PHP->客户端JavaScript。这是序列化数据的经典示例。我知道您可能有一些限制来保证系统不中断运行,但严格的序列化格式会使系统更安全。您不能这样做
要实现所需的功能,请首先使用split()函数将字符串拆分为逗号分隔的标记。然后,每个标记应进一步由“:”字符分割
然后,将最后一次拆分获得的两个令牌作为关联数组的键和值推送。如果您确定数据是安全的,则可以执行以下操作:
var MyAssocArray = eval('{' + MyString + '}');
除了,JSON对象真的可以在没有浏览器支持警告的情况下被推荐吗?另外-我发现了另一种方法:因为字符串正在从数据库中拉出-我发现我可以使用PHPYeah填充javascript关联数组。。这对我不起作用。我尝试了它,但得到了一个错误--“无效标签”,不幸的是,如果任何字符串键或值中有逗号,该错误将不起作用。