如何在JavaScript中对数组元素进行JSON解码?

How to JSON decode array elements in JavaScript?

提问人:Brayn 提问时间:10/8/2008 最后编辑:Brayn 更新时间:3/25/2013 访问量:208149

问:

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

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

function(){返回 JSON.encode(this);}

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

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

那么这是如何做到的呢?

JavaScript JSON

评论

0赞 Dylan Beattie 10/8/2008
不清楚你的意思......你能发布更多示例代码吗?实际的数组内容和重定向调用将非常有帮助。

答:

1赞 Lou Franco 10/8/2008 #1

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

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

评论

0赞 Brayn 10/8/2008
正如我所说,我试图“评估”链接元素,但随后它返回了“未定义”。数组中的数据来自解析 XML,您认为它与此有关吗?
5赞 Joel Anair 10/8/2008 #2

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

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

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

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

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

评论

0赞 Brayn 10/8/2008
我怀疑这是一个字面字符串。最有可能是一个函数。我尝试过“eval('(' + jsonObject + ')')”,但它仍然返回与以前相同的输出......
0赞 Joel Anair 10/9/2008
是的,可以想象将函数传递给 eval() 将调用该函数的 toString 方法,返回一个字符串,该字符串将返回该函数本身。所以这是有道理的。
2赞 Kon 10/8/2008 #3
eval('(' + jsonObject + ')')

评论

8赞 olliej 10/9/2008
eval 只是一种安全的方法,用于解码 JSON 数据,前提是您 100% 信任您的源:D
1赞 Vova Popov 3/29/2013
这不能被 eval-ed -> {“code”:200,“lang”:“en-de”,“text”:[“string 1”,“string 2”]}
1赞 Leonel Martins 10/10/2008 #4

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

var url = myArray[i]();
9赞 Floccinaucinihilipilification. 3/15/2011 #5

假设您在 PHP 中有一个数组作为 $iniData,其中包含 5 个字段。如果使用 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>
44赞 matija kancijan 7/1/2011 #6
var obj = jQuery.parseJSON('{"name":"John"}');
alert( obj.name === "John" );

请参阅 jQuery API

-1赞 pirogtm 3/25/2013 #7

我以这种方式解码 JSON:

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