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

25

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

但是,如果我尝试重定向或者只是对链接数组元素做“alert”操作,我会得到:

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

据我观察,这是因为浏览器在呈现页面时进行了JSON编码,因此链接被正确显示。我已经尝试了几种方法来使其正确重定向(这就是我想通过链接实现的),包括使用“eval”,但都没有成功。

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

那么,如何解决这个问题?


不太清楚你的意思...你能发更多的示例代码吗?实际数组内容和重定向调用会非常有帮助。 - Dylan Beattie
7个回答

44

9
假设您在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>

5
如果您在提示框中看到此文本:
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 + ')')",但仍然返回与之前相同的输出... - Brayn
是的,我想传递一个函数到 eval() 中会调用该函数的 toString 方法,返回一个字符串,该字符串可以被 eval 回该函数本身。所以这很有道理。 - Joel Anair

2
eval('(' + jsonObject + ')')

8
如果你完全信任数据来源,eval是解码JSON数据的安全方式。 :D - olliej
1
这个不能被评估 -> {"code": 200, "lang": "en-de", "text": ["string 1", "string 2"]} - Vova Popov

1
在 JavaScript 中解析 JSON 数据,如果你信任该字符串,可以直接使用 eval() 函数进行解析。否则,可以使用更安全的代码,在 http://json.org 找到相关信息。
解析后将得到一个 JavaScript 数据结构,你可以遍历其中的数据以获取所需信息。

就像我之前所说的,我尝试对链接元素进行“eval”操作,但是它返回了“undefined”。数组中的数据来自解析XML,你认为这可能与此有关吗? - Brayn

1
如果您获取的对象元素是一个函数,您可以尝试这样做:
var url = myArray[i]();

-1

我是这样解析JSON的:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接