为什么有时json输出用括号包装

  • 本文关键字:包装 输出 json php json
  • 更新时间 :
  • 英文 :


我刚开始使用JSON,有时我还是有点不知所措。

当我从这个链接检索数据时,有一对括号包裹着JSON字符串(或对象文字):

({"book":[{"book_ref":"1 S","book_name":"1 Samuel","book_nr":"9","chapter_nr":"3","chapter":{"16":{"verse_nr":"16","verse":"u4ee5 u5229 u547c u5524 u6492 u6bcd u8033 u8bf4 uff1a u6211 u513f u6492 u6bcd u8033 u554a uff01 u6492 u6bcd u8033 u56de u7b54 u8bf4 uff1a u6211 u5728 u8fd9 u91cc uff01rn"}}}],"direction":"LTR","type":"verse","version":"cus"});

根据我过去的经验,我从未见过这样的事情。(例如,此链接输出一个没有括号的JSON字符串。)

令我惊讶的是,我似乎可以像往常一样在jQuery:中使用它

jQuery.ajax({
    url:'http://getbible.net/json',
    dataType: 'jsonp',
    data: 'p=John1&v=kjv',
    jsonp: 'getbible',
    success:function(json){console.log(json)}
});

然而,当我尝试使用PHP的file_get_contents(),然后使用json_decode()来获取它时,括号似乎挡住了去路,而json_decode()什么也不返回。

那么括号的用途是什么呢?它与jsonp有关吗?有没有办法在PHP中使用这种JSON,而不编写代码来去掉括号?

您应该在访问数据时提供的url中使用回调参数。因为数据交换格式是jsonp。添加这些括号可能是因为回调被计算为空字符串。

请使用您提供的url查看下面的示例。

https://getbible.net/json?passage=1samuel3:16&v=cus&callback=foo //foo is the callback name

它返回回调名称为foo的数据。

foo({"book":[{"book_ref":"1 S","book_name":"1 Samuel","book_nr":"9","chapter_nr":"3","chapter":{"16":{"verse_nr":"16","verse":"u4ee5 u5229 u547c u5524 u6492 u6bcd u8033 u8bf4 uff1a u6211 u513f u6492 u6bcd u8033 u554a uff01 u6492 u6bcd u8033 u56de u7b54 u8bf4 uff1a u6211 u5728 u8fd9 u91cc uff01rn"}}}],"direction":"LTR","type":"verse","version":"cus"});

请参阅下面的示例,该示例显示了如何访问数据。

var url="https://getbible.net/json?passage=1samuel3:16&v=cus&";
var callbackname = "callback";
$.getJSON(url+'callback=' + callbackname, function(json){
    //loop through data
    $.each(json.book,function(i,dat){
        document.write(dat.book_ref); //print the book reference "1 S"
    });
});

我认为PHP json_encode是"正确的",您发布的第一个链接返回的值是不是有效的JSON,而似乎只是变量赋值的javascript代码片段。

请参阅JSON规范,该规范明确规定JSON对象必须以{开头,以}结尾。

最新更新