【问题标题】:How can I convert a JSON text Array to a JavaScript Array?如何将 JSON 文本数组转换为 JavaScript 数组?
【发布时间】:2011-08-17 15:46:58
【问题描述】:

我有以下文本对象:

[{message="Hello World"}]

如何将其转换为 JavaScript 数组?

【问题讨论】:

    标签: javascript arrays text


    【解决方案1】:

    您可以将= 替换为:,然后使用JSON.parse。然后你需要用"'s 包装消息。

    // error = not :
    JSON.parse('[{message="Hello World"}]')
    
    // errors = message not "message"
    JSON.parse('[{message="Hello World"}]'.replace('=',':'))
    

    试试这个:

    var message = '[{message="Hello World"}]'
    message = message.replace('message', '"message"').replace('=',':')
    JSON.parse(message)
    

    您可以使用eval 来做同样的事情:

    // still gotta replace the '='
    eval('[{message="Hello World"}]'.replace("=",":"))
    

    但是eval还有其他问题:

    eval('window.alert("eval is evil")')
    

    所以要小心。确保你知道你在评估什么。

    【讨论】:

      【解决方案2】:

      那是JSON。如果你使用的是 jquery,那么

      var arr = jQuery.parseJSON('[{message="Hello World"}]');
      alert(arr[0].message);
      

      一种远不那么“安全”的方法是

      var arr = eval('[{message="Hello World"}]');
      

      之后 arr 将与 jquery 版本相同。

      但是,它可能应该是 [{message:"Hello World"}] 才能成为正确有效的 json。

      【讨论】:

      • 是的,我刚回来编辑问题以说明它是 JSON,而不是 HTML。您的解决方案完美运行。谢谢。
      【解决方案3】:

      虽然这不是有效的 JSON,但您可以将所有 = 替换为 :,为键添加引号,然后使用 JSON.parse 进行转换:

      //text = '[{message="Hello World"}]'
      text = text.replace(/(\w+)\s*=/g, "\"$1\":");
      var array = JSON.parse(text);
      

      如果不支持JSON.parse,可以使用eval

      //text = '[{message="Hello World"}]'
      text = text.replace(/(\w+)\s*=/g, "\"$1\":");
      var array = eval("("+text+")");
      

      虽然不推荐这样做。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-05-24
        • 1970-01-01
        • 2022-12-03
        • 2011-08-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-06-21
        相关资源
        最近更新 更多