2012-04-26 68 views
1

所以我有这个JSONJSON映射在Javascript

https://bitcoinpayflow.com/orders{"order":{"bitcoin_address":"1NwKSH1DJHhobCeuwxNqdMjK5oVEZBFWbk"}}

不,我想引用bitcoin_address

首先,我在一开始

 var stripped = data.substring(33); 
     alert(stripped); 
       var btc = stripped.orders.bitcoin_address; 
     alert(btc); 

我剥去字符串得到第一个警报,但不是第二个。任何想法为什么?

回答

2

因为stripped仍然只是一个字符串。你需要将它解析成一个对象。您可以使用本地JSON.parse方法来做到这一点:

var stripped = JSON.parse(data.substring(33)); 

另外,你引用的orders属性,它不存在。这是order

请注意,旧版浏览器不支持JSON.parse。您可以使用this polyfill来确保它始终可用。

+0

downvote的任何理由? – 2012-04-26 08:47:44

+0

谢谢!我之前使用'订单'。这只是匆忙改写为stackoverflow。 我没有downvote?我在等待,直到时间限制过去,所以我可以打勾。 – Joseph 2012-04-26 08:48:51

1

最简单的方法来解码JSON - 字符串 - 使用eval

var bitcoins = eval('(' + json_string + ')'); 

并获得bitcoins['order']['bitcoin_address'] 但它有点不安全。上层方法更安全。

+1

不,处理JSON字符串的最简单方法是使用'JSON.parse'。你不需要为此使用'eval'。 – 2012-04-26 08:43:56

+0

使用eval通常是一个坏主意。尽可能避免这种情况。 – Kirstein 2012-04-26 08:44:28

+0

Omg我知道它,但它也是作品。如果我写这种方法,它意味着我使用它 – 2012-04-26 08:45:16

1

我会使用JSON.parse如下。

$.post('php/whatever.php',{data:dS},function(res){ 
    var o=JSON.parse(res); 
    var bitcoins=o.order.bitcoinaddress; 
},"text"); 
+0

为什么你使用“文本”而不​​是“json”? – 2012-04-26 08:53:00

+1

这是一个非常好的问题,丹尼斯。我开始使用“文本”来避免“智能猜测”的需要,因为我猜我最初使用的模型也使用了“文本”。我不确定如果我把它做成'json',实际的区别是什么。我最初的印象是它可能不需要解析步骤。 Thwt的第二个例子是如何出现在http://api.jquery.com/jQuery.post/上的。我可能需要更新一堆代码!尽管我发布了,但它工作正常。 – Nick 2012-04-26 10:15:35