2013-07-19 38 views
2

我怎样才能检索使用JavaScript这样的JSON响应的价值观,我想正常的JSON解析似乎的Javascript:解析JSON输出结果

[["102",true,{"username":"someone"}]] 

试过下面这样的代码不起作用:

url: "http://somewebsite.com/api.php?v=json&i=[[102]]", 
onComplete: function (response) { 
var data = response.json[0]; 
console.log("User: " + data.username); // doesnt work 
+0

你能发表你试过的吗? –

+1

'someone'周围没有引号;这不是JSON响应。这是JYON:json--就像你自己的符号。 – Mics

+0

@AlexPuchkov更新了我试过的代码 – Natsume

回答

3

所以这个问题是它看起来像一个数组中的数组。所以要访问一个元素,你会做这样的事情。

console.log(obj[0][0]); 

应打印102

比方说,你创建像这样的对象:

var obj = [["102",true,{"username":someone}]]; 

这是你将如何访问每一个元素:

obj[0][0]102

obj[0][1]true
obj[0][2]["username"]是什么someone被定义为

从其他国家人民的回答好像有些你可能有被解析JSON字符串的问题。标准的做法是使用JSON.parse,请记住,只有在数据是字符串时才需要。这是应该如何完成的。

var obj = JSON.parse(" [ [ "102", true, { "username" : someone } ] ] ") 
+0

你回答的工作!但是,无论如何我不能使用JSON.parse,因为它是由于Firefox的SDK,所以我完成了dt = obj.json [0] [2],当我做dt.username时,控制台会说“未定义”,但是我'确保响应请求URL中存在错误,我确信我可以管理URL错误部分。 +1为你:D – Natsume

+0

@Natsume在你原来的帖子里,它看起来像'someone'是一个变量,它必须被定义为JSON才能工作 – aaronman

+0

哎呀,这被认为是字符串,我忘了包含“”D :.修复它:P – Natsume

3

这取决于你在哪里得到JSON:

如果你使用jQuery

然后jQuery将解析JSON本身并给你一个JavaScript变量回调函数。请确保您在$就调用提供正确的数据类型或使用helper方法类似$ .getJSON()

如果通过纯AJAX获取JSON数据

那么你可以做:

var jsonVar = JSON.parse(xhReq.responseText); 
4
var str = '[["102",true,{"username":"someone"}]]'; 
var data = JSON.parse(str); 
console.log("User: " + data[0][2].username); 
  1. 环绕someone用双引号
  2. 遍历尝试之前所述阵列的阵列以访问username属性

如果您使用AJAX获取数据,@Alex Puchkov's answer表示最好。

+0

我编辑了我的答案,包括JSON.parse你是如何推断这实际上是OP想要的 – aaronman

+0

@aaronman如果你要将字符串转换为JS中的对象,那是唯一真正的方法。大多数其他方法(包括jQuery的'.ajax')本身使用'JSON.parse'。在这个特殊情况下,OP没有提供足够的信息,但是有教训的猜测是@ @ Natsume的确在使用'$ .ajax',并且最有可能的是XHR的参数缺少一些东西,或者PHP服务器是返回错误的内容类型,返回的“对象”实际上是一个字符串。 H/W的问题是有关解析的,而不是关于XHR,因此我的答案。 – bguiz

+0

有点晚了,显然JSON.parse不是他想要的,老实说我还不确定他想要什么我反正UV'd – aaronman