【问题标题】:JavaScript associativea array - passing a string as array key: value pairsJavaScript associativea 数组 - 将字符串作为数组键传递:值对
【发布时间】:2012-03-23 13:14:30
【问题描述】:

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

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'

【问题讨论】:

    标签: javascript string key associative-array


    【解决方案1】:

    使用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。这是序列化数据的经典示例。我知道您可能会受到限制以保持系统不间断运行,但严格的序列化格式会使您的系统更加安全。

    【讨论】:

    • 除了,在没有浏览器支持警告的情况下真的可以推荐 JSON 对象吗?
    【解决方案2】:

    你不能这样做。

    要实现您想要的,请先使用 split() 函数将您的字符串拆分为逗号分隔的标记。然后每个标记应进一步由 ':' 字符分割。

    然后将最后一次拆分得到的两个token作为你的关联数组的键和值推送。

    【讨论】:

    • 不幸的是,如果任何字符串键或值中包含逗号,它将无法工作。
    【解决方案3】:

    如果您确定数据是安全的,那么您可以这样做:

    var MyAssocArray = eval('{' + MyString + '}');
    

    【讨论】:

    • 另外——我找到了另一种方法:因为字符串是从数据库中提取出来的——我发现我可以使用 PHP 填充 javascript 关联数组
    • 是的..这对我不起作用。我试过了,得到错误“--无效标签”
    猜你喜欢
    • 2017-06-14
    • 1970-01-01
    • 2020-05-01
    • 2022-11-26
    • 1970-01-01
    • 2019-09-20
    • 2012-11-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多