【问题标题】:How to JSON decode array elements in JavaScript?如何在 JavaScript 中对数组元素进行 JSON 解码?
【发布时间】:2008-10-08 12:10:04
【问题描述】:

我有一个 JavaScript 数组,其中包含一个 URL。如果我尝试简单地将 URL 放在页面中(该数组位于涉及 Yahoo! Maps API 的项目中),它会显示应有的 URL。

但是,如果我尝试进行重定向或只是对链接数组元素执行“警报”,我会得到:

function(){return JSON.encode(this);}

据我所知,这是因为浏览器在呈现页面时执行了 JSON.encode,因此链接显示正常。我尝试了几种方法使其正确重定向(这就是我想要对链接执行的操作)(包括使用“eval”),但没有成功。

在遵循一些建议后,我运行了eval('(' + jsonObject + ')'),但它仍然返回相同的输出。

那么这是怎么做到的呢?

【问题讨论】:

  • 不清楚您的意思...您可以发布更多示例代码吗?实际的数组内容和重定向调用会很有帮助。

标签: javascript json


【解决方案1】:

假设您在 PHP 中有一个包含 5 个字段的 $iniData 数组。如果使用 ajax -

echo json_encode($iniData);

在 Javascript 中,使用以下代码:

<script type="text/javascript">
    $(document).ready(function(){
        $.ajax({
            type: "GET",
            url: "ajaxCalls.php",
            data: "dataType=ini",
            success: function(msg)
            {
                var x = eval('(' + msg + ')');
                $('#allowed').html(x.allowed);              // these are the fields which you can now easily access..
                $('#completed').html(x.completed);
                $('#running').html(x.running);
                $('#expired').html(x.expired);
                $('#balance').html(x.balance);
            }
        });
    });
</script>

【讨论】:

    【解决方案2】:
    var obj = jQuery.parseJSON('{"name":"John"}');
    alert( obj.name === "John" );
    

    See the jQuery API.

    【讨论】:

      【解决方案3】:

      如果您在警报中收到此文本:

      function(){return JSON.encode(this);}
      

      当你尝试 alert(myArray[i]) 时,有几种可能:

      • myArray[i] 是一个函数(很可能)
      • myArray[i] 是文字字符串“function(){return JSON.encode(this);}”
      • myArray[i] 有一个 .toString() 方法,它返回那个函数或那个字符串。这是三者中最不可能的。

      最简单的判断方法是检查 typeof(myArray[i])。

      【讨论】:

      • 我怀疑这是一个文字字符串。很可能是一个函数。我尝试过“eval('(' + jsonObject + ')')”,但它仍然返回与以前相同的输出......
      • 是的,可以想象将函数传递给 eval() 将调用该函数的 toString 方法,返回一个字符串,该字符串将返回给该函数本身。所以这是有道理的。
      【解决方案4】:

      我这样解码 JSON:

      eval( 'var from_json_object = ' + my_json_str + ';' );
      

      【讨论】:

        【解决方案5】:
        eval('(' + jsonObject + ')')
        

        【讨论】:

        • 只有在您 100% 信任您的来源的情况下,eval 才是解码 JSON 数据的安全方法:D
        • 这不能被 eval-ed -> {"code":200,"lang":"en-de","text":["string 1","string 2"]}
        【解决方案6】:

        如果您信任该字符串,则 JavaScript 中的 JSON 解码只是一个 eval();如果您不信任,则可以在 http://json.org 上找到更安全的代码。

        然后,您将拥有一个 JavaScript 数据结构,您可以遍历该数据结构以获取所需的数据。

        【讨论】:

        • 正如我所说,我尝试“评估”链接元素,但随后返回“未定义”。数组中的数据来自于解析一个 XML,你认为它与此有关吗?
        【解决方案7】:

        如果你得到的对象元素是一个函数,你可以试试这个:

        var url = myArray[i]();
        

        【讨论】:

          猜你喜欢
          • 2018-07-18
          • 2021-11-25
          • 1970-01-01
          • 2021-10-15
          • 2021-02-16
          • 2022-01-13
          • 2010-10-09
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多