json_decode fails


json_decode fails

我对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.returtedItems()",它不认为它是一个要解码的字符串,所以我每次都会得到一个NULL值。

有人知道我在这里错过了什么吗?一旦我想好了如何抓住里面的东西,我想我已经做到了(简单的foreach或其他什么来根据需要获得其余的变量),但我似乎无法进入那里。

这是有效的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方法,调用

好吧,我只是想补充一下,你们真的帮了我一把。尤其是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!

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