PHP-file_get_contents使用regex获取JSON,但可以't JSON解码(得到JSON_E
PHP - file_get_contents get JSON with regex, but can't JSON decode (got JSON_ERROR_SYNTAX)
我尝试解析此页面:http://fr.hearthhead.com/cards以获取炉石卡片JS变量。所以我做了这样的事情:
$url = 'http://fr.hearthhead.com/cards';
$content = file_get_contents($url);
preg_match('#var hearthstoneCards = (.*)}]';#Us', $content, $out);
$out = $out[1].'}]';
$tab_id_card = json_decode($out,true);
我尝试了我能找到的所有技巧(修剪、条带斜杠、BOM的preg和其他东西,在json_decode上放置标志和许多其他东西),但我没有做到这一点。
如果我file_put_contents$out var并与真实的源进行比较,那么它是相同的(相同的长度)。如果我把字符串放在JS控制台上,我就会得到数据。但是PHP不想解析这个var:(
有人有个主意?:)
问题是,当代码是真正成熟的JavaScript时,您会认为它是JSON。在该代码中,出现了许多属性名称popularity
的无引号重复,这是一个良好的JavaScript,但无效的JSON。
我试图构建一个正则表达式来修复任何未引用的属性名称。问题是,这是不可行的。在我的例子中,值中的任何冒号都破坏了我的正则表达式。
除了编写一个解析器来修复这种不符合项或调用JS解释器(这需要一个外部依赖项,如V8Js)之外,我认为您现在可以修复这个特定的场景:
$url = 'http://fr.hearthhead.com/cards';
$content = file_get_contents($url);
preg_match('#var hearthstoneCards = (.*)}]';#Us', $content, $out);
$out = str_replace('popularity', '"popularity"', $out);
$out = $out[1].'}]';
$tab_id_card = json_decode($out,true);
如果你担心未来会引入新的未引用属性,你可以检查$tab_id_card
中的NULL
,并将错误记录在你经常检查的地方,甚至可以自己发出通知。虽然我会这么做,但我认为这不太可能,因为所有其他属性都被正确引用了。
相关文章:
- 我怎样才能得到“__类型“;用javascript输入json
- 当我JSON.stringfy(对象)时,我得到一个疯狂的字符串作为值
- 使用来自AngularJS的Web API JSON响应-错误:应为和数组,但得到了一个对象
- JSON得到一个值(非常新手)
- 调用.ajax方法得到未定义的json结果,返回json格式列表<字符串>
- 将json数据发送到另一个url-在您'我从我自己的网址上得到的
- 解析有效的 JSON 得到“语法错误:意外令牌非法”
- 在保存到本地存储之前,如何修改我得到的 json 响应以使其看起来像这样
- 将 Json 数组挖空映射到可观察数组得到错误
- 在 Jquery 中,如何向 JSON 对象的一部分发出警报?我得到“未定义”
- 循环访问 JSON 对象,没有得到我期望的结果
- 得到“;未定义的“;当我用js打印json数组时
- 当我用JQueryAJAX传递JSON数组时,我会得到null
- 我得到了一个“;意外的令牌“;尝试对简单对象执行JSON.parse时出错
- 在JSON中POST一个js::数组,得到"undefined:undefined”;
- 可以'在我的phonegap页面上没有得到json结果
- 我得到了一个JSON/Javascript对象,因为我可以在控制台中看到它,但我如何让它序列化并使我的数据绑定到我的Ui
- JSON错误:应为..得到'未定义'
- 不能从下面的json得到标题
- 通过ajax JSON得到未定义