2012-06-29 102 views
0

我用下面的PHP代碼返回一個JSON字符串:無法獲取JSON字符串解析到一個數組

$itemURL = 'http://***.***.***/search?tag=Football&affiliate_id=&max_results=3'; 
$response = file_get_contents($itemURL);//curl_exec($curlHandle); 
echo $response; 
$response = array($response); 
echo $response[0]; 

我得到一個JSON字符串,它看起來是這樣的:

[ { 「ID」: 「123」, 「描述」: 「冠軍足球海軍短衫」, 「HighPrice」:16.99, 「LowPrice」:16.99, 「SalePrice」:空, 「OnSa le「:false, 」URL「:」http://www.mystore.com/itemDescription「, 」ImageURL「:」http://www.mystore.com/mainstore/045.jpg「, 」LargeImageURL 「:」http://www.mystore.com/mainstore/045.jpg「, 」ThumbnailImageURL「:」http://www.mystore.com/mainstore/045.jpg「, 」MiniImageURL「:」http ://www.mystore.com/mainstore/045.jpg「, 」AffiliateID「:」「 }, { 」ID「:」23「, 」Description「:」Champion Football Navy T-XL XL 「, 」HighPrice「:16.99, 」LowPrice「:16.99, 」SalePrice「:null, 」OnSale「:false, 」URL「:」http://www.mystore。 com/itemDescription「, 」ImageURL「:」http://www.mystore.com/mainstore/045.jpg「, 」LargeImageURL「:」http://www.mystore.com/mainstore/045.jpg「 , 「ThumbnailImageURL」:「http://www.mystore.com/mainstore/045.jpg」, 「MiniImageURL」:「http://www.mystore.com/mainstore/045.jpg」, 「AffiliateID 「: 「」 } ]

然而,當我回聲$響應[0]我得到整個字符串。如果我使用json_decode或編碼,我會得到一個字符串,但附帶引號。我無法弄清楚如何投射這個dang事物,因此它可以作爲我可以迭代的一組對象來操作。感謝提前任何幫助

+0

'json_decode($ response)'(從'file_get_contents'設置後立即放置)不會返回一個對象嗎? – ghbarratt

+0

爲什麼downvote?這不是一個合法的問題嗎?這是我遇到的一個問題,我無法在Google或這裏找到答案,並且提供了我的源代碼以及我正在使用的json。我不明白爲什麼我被拒絕了。 –

回答

2

嘗試......

$itemURL = 'http://***.***.***/search?tag=Football&affiliate_id=&max_results=3'; 
$response = file_get_contents($itemURL);//curl_exec($curlHandle); 
$response = json_decode($response); 

你會得到一個對象像...

array(2) { 
    [0]=> 
    object(stdClass)#1 (12) { 
    ["ID"]=> 
    string(3) "123" 
    ["Description"]=> 
    string(30) "Champion Football Navy T-shirt" 
    ["HighPrice"]=> 
    float(16.99) 
    ["LowPrice"]=> 
    float(16.99) 
    ["SalePrice"]=> 
    NULL 
    ["OnSale"]=> 
    bool(false) 
    ["URL"]=> 
    string(38) "http://www.mystore.com/itemDescription" 
    ["ImageURL"]=> 
    string(40) "http://www.mystore.com/mainstore/045.jpg" 
    ["LargeImageURL"]=> 
    string(40) "http://www.mystore.com/mainstore/045.jpg" 
    ["ThumbnailImageURL"]=> 
    string(40) "http://www.mystore.com/mainstore/045.jpg" 
    ["MiniImageURL"]=> 
    string(40) "http://www.mystore.com/mainstore/045.jpg" 
    ["AffiliateID"]=> 
    string(0) "" 
    } 
    [1]=> 
    object(stdClass)#2 (12) { 
    ["ID"]=> 
    string(2) "23" 
    ["Description"]=> 
    string(33) "Champion Football Navy T-shirt XL" 
    ["HighPrice"]=> 
    float(16.99) 
    ["LowPrice"]=> 
    float(16.99) 
    ["SalePrice"]=> 
    NULL 
    ["OnSale"]=> 
    bool(false) 
    ["URL"]=> 
    string(38) "http://www.mystore.com/itemDescription" 
    ["ImageURL"]=> 
    string(40) "http://www.mystore.com/mainstore/045.jpg" 
    ["LargeImageURL"]=> 
    string(40) "http://www.mystore.com/mainstore/045.jpg" 
    ["ThumbnailImageURL"]=> 
    string(40) "http://www.mystore.com/mainstore/045.jpg" 
    ["MiniImageURL"]=> 
    string(40) "http://www.mystore.com/mainstore/045.jpg" 
    ["AffiliateID"]=> 
    string(0) "" 
    } 
} 

然後你就可以訪問使用$響應您的JSON對象[0],$ response [1]等...使用該字段的具體名稱,如$ response [0] - > AffiliateID fortance。

+0

我認爲我遇到的問題是$ response [0] - > AffiliateID的語法。我無法弄清楚正確的語法是什麼。感謝您節省了一天的幫助。 –

1

需要調用的屬性,你正在尋找

IE:

echo response[0].ID; //getting the 1st item in the response array then access the "ID" property of the json object. 

JSON響應是一個動態的對象,它允許您與所有的屬性,就好像你創建的對象交互刮。

[{... and the ...}]中的值是對象值。

so ...

var json = '{"ID" : 1, "Prop1" : "Value1", Prop2 : "Value2" }'; 

可以使用jQuery的parseJSON方法

var obj= jQuery.parseJSON(json); 
echo obj.ID; //1 
echo obj.Prop1; //Value 
echo obj.Prop2; //Value2 

解析當你有[......還有......]周圍的{和}你知道這個對象是一個數組,需要進行相應處理。

希望這會有所幫助。

WM

+0

我給了你一個幫助upvote,但它是一個PHP問題,而不是JavaScript。感謝您的建議,但! –

0
if (mysql_num_rows($result) > 0) { 
$response["events"] = array(); 

while ($row = mysql_fetch_array($result)) { 
     $tmparr = array(); 
     $tmparr["uid"] = $row["uid"]; 
     $tmparr["date"] = $row["date"]; 
     $tmparr["hours"] = $row["hours"]; 
     $tmparr["store_name"] = $row["store_name"]; 
     $tmparr["event_information"] = $row["event_information"]; 
     $tmparr["event_type"] = $row["event_type"]; 
     $tmparr["Phone"] = $row["Phone"]; 
     $tmparr["price"] = $row["price"]; 
     $tmparr["address"] = $row["address"]; 
     $tmparr["image_url"] = $row["image_url"]; 
     $tmparr["created_at"] = $row["created_at"]; 
     $tmparr["updated_at"] = $row["updated_at"]; 
     array_push($response["events"], $tmparr); 
}  
$response["success"] = 1; 
echo json_encode($response); 

我不明白你正在嘗試做的,但是這是我以從SQL查詢($結果)返回的數據行的一組使用的方式。我希望這可以幫助你

+0

這部分過程是固定的,所以我不能改變它。我遇到的問題是正在發送的json。其實問題出在試圖訪問這些信息的語法上。但現在都很好。 –