2008-10-08 22 views
20

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

但是,如果我尝试做一个重定向或只是链接数组元素上做一个“警告”我得到:

功能(){返回JSON.encode(本);}

就我所见,这是因为浏览器在呈现页面时会执行JSON.encode,因此链接显示为OK。我尝试了几种方法来正确地重定向(这就是我想要对链接所做的)(包括使用'eval'),但没有运气。

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

那么这是如何完成的?

+0

目前尚不清楚你的意思......你可以发布更多的示例代码?实际的数组内容和重定向调用将非常有帮助。 – 2008-10-08 12:14:23

回答

2

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

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

+0

正如我所说我试图'评估'链接元素,但它然后返回'未定义'。数组中的数据来自于解析一个XML,你认为它可能与此有关吗? – Brayn 2008-10-08 12:23:46

5

如果你得到这个文本警告:

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

当您尝试警报(myarray的[1]),则有几种可能性:

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

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

+0

我怀疑这是一个文字字符串。最有可能的是一个功能。我试图“eval('('+ jsonObject +')')”,但它仍然返回与以前相同的输出... – Brayn 2008-10-08 15:58:04

+0

是的,想象一下将函数传递给eval()会调用该函数的toString方法,返回一个字符串,该字符串可以回溯到该函数本身。所以这是有道理的。 – 2008-10-08 18:27:01

3
eval('(' + jsonObject + ')') 
1

如果你的对象元素是一种功能,你可以试试这个:

var url = myArray[i](); 
7

假设你有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> 
39
var obj = jQuery.parseJSON('{"name":"John"}'); 
alert(obj.name === "John"); 

See the jQuery API

-1

我解码JSON这样:

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