json_decode失败

时间:2012-07-24 16:47:41

标签: php json

我对json很新,我遇到了json_decode的问题。我想我知道为什么,但我无法理清如何解决它。

基本上,我有一个提供json信息的URL。我使用cURL抓住它,并将其作为PHP变量返回,这样就可以了。我可以打印出我想要的所有信息。但是,当我使用json_decode($ json,true)时,它返回NULL。

我认为这是因为从技术上讲,返回的内容不是字符串,而是更像是一个对象 - 我无法理解如何抓取该对象的内容。

例如,当我将json的东西作为php变量返回时:

print_r($json);

返回的输出看起来像是这样(我不会完全这样做,因为它很大,所以我会告诉你布局以保持简单)

MyThing.returnedItems({MyThing.returnedItems({
"projects":[{
    "completed":"2010-12-21",
    "status":"finished",
    "favorited":0,
    "started":"2010-12-20",
    "percentage":78,
    "permalink":"slug to post",
    "size":"One size",
    "thumbnail":{"src":"full path to full size image",
                 "medium":"full path to thumbnail"},
    "name":"Some title here",
    "notes":"description here",
    "url":"URL to page",
    "comments":0},

所以你可以看到它就像一个嵌套数组。我不介意,但我希望能够访问这些数组的所有键/值对作为PHP变量。但似乎由于它周围的“MyThing.returnedItems()”,它不会将其视为要解码的字符串,因此每次都会得到一个NULL值。

任何人都知道我在这里缺少什么?一旦我弄清楚如何抓住那里的东西,我想我已经得到了它(简单的foreach或者其他什么来得到其余的变量),但我似乎无法进入那里。

2 个答案:

答案 0 :(得分:2)

这是有效的JSON

{
"item1": [
    {
        "something": [],
        "something else": "some value"
    }
],
"another fun thing": [
    {
        "more fun": "fun value 1",
        "even more!": "fun value 2"
    }
],
"item2": {
    "another thing": "another value"
}
}

这不是!

 MyThing.returnedItems({
 "item1":[{"something:[],
           "something else": "some value"},
           "another fun thing": [{"more fun": "fun value 1",
                                  "even more!": "fun value 2"}]
         ],
 "item2":{"another thing": "another value"}
 })

它是一个javascript方法调用

答案 1 :(得分:0)

好的,我只是想补充一点,你们真的帮助了我。特别是MaX,因为通过了解正在发生的事情的“官方术语”,我有更好的搜索,最终找到了一些非常有趣的代码,最终让我得到了解决方案。但是,我确实发现了为什么我把json包裹在那个奇怪的函数方法调用中的原因:网站给我访问他们的API的URL实际上有一个调用,所以它被包装在其中。换句话说,我有的json文件URL是这样的:

somesite.com/apicall.json?key=1234567890&callback=MyThing&version=0...

所以,一旦我删除了“回调”部分 - BAM,json就不再被包裹,并且一个全新的foreach函数世界向我开放。所以,即使解决方案最终成为我的一个非常愚蠢的疏忽,我还是要感谢大家的意见,因为我学到了很多我今天没想到的东西XD

哦,实际上最终工作的代码(在我删除了URL的回调部分之后,因为json_decode仍然在我身上返回NULL)是这样的:

$data = json_decode(file_get_contents($json), true);
print_r($data); // array of everything available for me to mess with!

再次感谢您的帮助,大家:)我真的很感激!