我对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或者其他什么来得到其余的变量),但我似乎无法进入那里。
答案 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!
再次感谢您的帮助,大家:)我真的很感激!