【发布时间】:2014-12-11 18:25:58
【问题描述】:
我有以下代码:
preg_match_all('/"([^"]*)"/', $json , $results);
var_dump($json);var_dump($results);die();
此时$json 的转储已
string(423) "{"http://ecx.images-amazon.com/images/I/51Lg%2Bd4cqRL._SX355_.jpg";[355,266],"http://ecx.images-amazon.com/images/I/51Lg%2Bd4cqRL._SX425_.jpg":[425,319],"http://ecx.images-amazon.com/images/I/51Lg%2Bd4cqRL._SX466_.jpg":[466,350],"http://ecx.images-amazon.com/images/I/51Lg%2Bd4cqRL._SX450_.jpg":[450,338],"http://ecx.images-amazon.com/images/I/51Lg%2Bd4cqRL.jpg":[500,375]}"
我正在尝试获取链接。我试过json_decode,但我得到错误号 4,这是不正确的语法。字符串的 JSON 前后没有不可见的字符。没有运气,我决定尝试正则表达式,但上面的代码返回
array(2) { [0]=> array(0) { } [1]=> array(0) { } }
任何帮助获得第一个第一将不胜感激。
好的,正如你们中的一些人所指出的,这基本上是一种让它无论如何都能正常工作的技巧。如果你有兴趣这样做,这里是完整的信息:
$ch = curl_init("http://www.amazon.com/gp/product/B00BEL2G4C/ref=s9_wish_gw_d31_g21_i3?pf_rd_m=ATVPDKIKX0DER&pf_rd_s=desktop-1&pf_rd_r=1VPYMKFSFN5BRHD4AD3W&pf_rd_t=36701&pf_rd_p=1970559082&pf_rd_i=desktop");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_COOKIESESSION, true );
curl_setopt($ch, CURLOPT_COOKIEJAR, "cookies.txt" );
curl_setopt($ch, CURLOPT_COOKIEFILE, "cookies.txt" );
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:25.0) Gecko/20100101 Firefox/25.0");
$curl_scraped_page = curl_exec($ch);
$html = $html->load($curl_scraped_page);
$json = $html->find('#imageBlock', 0)->children[0]->children[0]->children[1]->children[1]->children[0]->children[2]->children[0]->children[0]->children[0]->children[0]->children[0]->attr['data-a-dynamic-image'];
$json = utf8_encode($json);
var_dump(json_decode($json));var_dump(json_last_error());die();
我知道亚马逊有一个 API,但它们很烦人,只有当你是附属公司时才会让你使用它,而且他们不接受正在建设的网站作为附属公司,所以我只是想把它弄出来,然后会改变一旦网站上线并获得亚马逊附属公司的批准,它就会发送到 API。
网址实际上是动态的,只是为了测试目的使用了静态网址。 我会喜欢找到一个 JSON 解决方案,因为这样会更干净。
【问题讨论】:
-
为什么不把 JSON 解析成数组呢?这将使您的数据更容易获取,而不是对字符串进行正则表达式。
-
我试过了,得到了不正确的语法错误,即使我检查了 json lint 并且它是一个有效的 json :( 如果你有一个,我会采取一个解决方案 :)
-
因此,您决定以丑陋的方式破解它,而不是通过找出 jsode_decode() 不起作用的原因以正确的方式进行操作?
-
json_decode()对我来说效果很好(PHP 5.5.19) -
看看这个:3v4l.org/O9bIo。它似乎在自 5.2.0 以来的所有 PHP 版本上都可以正常工作(当引入
json_decode()时)。