无法将JSON字符串解析为数组

时间:2012-06-29 21:58:50

标签: php arrays json

我正在使用以下PHP代码返回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”,           “描述”:“冠军足球海军T恤”,           “HighPrice”:16.99,           “LowPrice”:16.99,           “SalePrice”:null,           “OnSale”:错误,           “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”,           “描述”:“冠军足球海军T恤XL”,           “HighPrice”:16.99,           “LowPrice”:16.99,           “SalePrice”:null,           “OnSale”:错误,           “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”:“”       }   ]

然而,当我回显$ response [0]时,我得到整个字符串。如果我使用json_decode或编码我得到一个字符串,但周围有引号。我无法弄清楚如何施放这个dang的东西,所以它作为一个对象数组运行,然后我可以迭代。感谢您提前提供任何帮助

3 个答案:

答案 0 :(得分: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) ""
  }
}

然后你可以使用$ response [0],$ response [1]等访问你的JSON对象......使用字段的特定名称,如 $ response [0] - > AffiliateID istance。

答案 1 :(得分:1)

您需要致电您正在寻找的房产

IE:

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

json响应是一个动态对象,它允许您与所有属性进行交互,就像从头开始创建对象一样。

[{...和...}]内的值是对象值。

所以...

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

答案 2 :(得分: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查询($ result)返回数据行数组的方式。我希望这可以帮助你