0

我对 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 或其他根据需要获取变量的东西),但我似乎无法进入那里。

4

2 回答 2

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方法调用

于 2012-07-24T16:52:48.777 回答
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!

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

于 2012-07-24T18:55:09.717 回答