【问题标题】:JSON mapping in JavascriptJavascript 中的 JSON 映射
【发布时间】:2012-04-26 08:39:35
【问题描述】:

所以我有这个 JSON

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

不,我想引用比特币地址

所以我先把开头的字符串去掉

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

我收到了第一个警报,但没有收到第二个。知道为什么吗?

【问题讨论】:

    标签: javascript json map


    【解决方案1】:

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

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

    另外,您正在引用不存在的 orders 属性。我是order

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

    【讨论】:

    • 谢谢!我之前确实使用过“订单”。这只是为 stackoverflow 仓促重写的。我没有投反对票?我正在等到时间限制过去,所以我可以打勾。
    【解决方案2】:

    解码json最简单的方法——字符串——使用eval

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

    并访问bitcoins['order']['bitcoin_address'] 但是有点不安全。上面的方法更安全。

    【讨论】:

    • 不,处理 JSON 字符串的最简单方法是使用 JSON.parse。您不需要为此使用eval
    • 使用 eval 通常是个坏主意。尽量避免这种情况。
    • 天哪,我知道,但它也有效。如果我写这个方法并不意味着我使用它
    • @DenisErmolin - 那为什么要提倡不好的做法呢?
    • 我没有提倡不良做法。我评论说你的方式使用起来更安全。他必须知道所有可能的方法和坏方法。
    【解决方案3】:

    我会按如下方式使用 JSON.parse。

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

    【讨论】:

    • 为什么你使用“text”而不是“json”?
    • 这是一个非常好的问题,丹尼斯。我开始使用“文本”来避免需要“智能猜测”,因为我猜我最初使用的模型也使用了“文本”。如果我将其设为“json”,我不确定实际的区别是什么。我最初的印象是它可能不需要解析步骤。这就是 api.jquery.com/jQuery.post 上的倒数第二个示例的显示方式。我可能需要更新一堆代码!不过,正如我发布的那样,它工作正常。
    猜你喜欢
    • 2022-01-10
    • 2019-04-15
    • 1970-01-01
    • 2020-04-12
    • 2019-01-31
    • 1970-01-01
    • 2018-09-28
    • 2011-08-04
    • 2011-11-18
    相关资源
    最近更新 更多