2012-07-24 38 views
0

我對json相當陌生,而且json_decode有問題。我想我知道爲什麼,但我一直無法解決如何解決它。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

它爲什麼圍繞它?它與JSON無效。 – Esailija 2012-07-24 16:49:41

+0

'MyThing.returnedItems({})'不是有效的json。 – PeeHaa 2012-07-24 16:50:33

+0

您錯過了一個引號。 '「的東西:[]'應該是''東西」:[]'。不確定是否解決了整個問題,或者這可能只是一個錯字,而不是代碼中的錯字。 – curtisdf 2012-07-24 16:51:41

回答

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

+0

感謝MaX,我編輯了上面的代碼以準確反映出來的內容。很高興知道正確的術語是什麼,所以我可以進一步挖掘:) – Shelly 2012-07-24 17:08:17

+0

您的轉儲仍然不完整。 http://jsonlint.com會幫助你驗證你的JSON對象。 – MaX 2012-07-24 17:11:03

+0

其實,我已經驗證了json對象,並且它是有效的。我只在這裏粘貼了部分轉儲,因爲返回的內容是*巨量*。以上只是一個部分例子。 – Shelly 2012-07-24 17:12:36

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! 

您的幫助再次謝謝大家:)我真的欣賞它!