JavaScript associativea 数组 - 传递一个字符串作为数组键 : value pairs

标签 javascript string key associative-array

我知道我可以像这样创建一个关联数组:

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'

最佳答案

使用JSON -- 它是序列化的 JavaScript 对象表示法,非常接近您正在做的事情。

你需要做的

var MyAssocArray = JSON.parse(MyString);

此外,JSON 使用双引号,而不是单引号;如果您使用简单的对象,您可能可以编写代码将字符串中的 ' 替换为 "",但如果字符串包含双引号,这将很棘手。

如果您使用的浏览器未实现 JSON.parse(),您可以使用 JSON 网站上的实现(参见 links at bottom of this page),或者如果您使用的是 jQuery,则有 jQuery.parseJSON() .


警告:您的解决方案存在安全风险,除非您确定数据库中的数据已被清理:

 var My_Single_Dime_Arr = {<?php echo $String_Pulled_From_Database; ?>}

这相当于调用eval();如果您的数据库字符串有任何恶意代码,它可能会做坏事。这就是发明 JSON 的原因之一——在评估之前很容易确保其内容有效(因此安全)。

正如您向我们展示的那样,您的整体架构是[数据库中的数据] -> 服务器端 PHP -> 客户端 JavaScript。这是序列化数据的经典示例。我知道你可能有一些限制来保持你的系统不间断地运行,但严格的序列化格式会让你的系统更安全。

关于JavaScript associativea 数组 - 传递一个字符串作为数组键 : value pairs,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9577267/

相关文章:

javascript - 在 javascript 中处理 RFC 2822 电子邮件

javascript - 水平和垂直滚动

c++ - 问题 : String writes over another string

windows - Powershell 将多个 key 导出到一个 .reg 文件

javascript - 谷歌脚本: i can not assign a value to a key of an object

javascript - 打印 JavaScript 控制台的堆栈跟踪

javascript - 如何以编程方式使链接工作?

python - 查找两个字符串不同的位置

JavaScript 正则表达式提取特定单词后面引号之间的所有字符

php - 有点简单的PHP数组求交问题