2016-06-13 114 views
0

我正在为我们公司的职位列表页面工作。我们正在使用API​​从我们的HR软件提供商处检索信息。 JSON似乎无效。我正在使用下面的内容来测试它。如何用PHP解析无效的JSON

<?php 
    //Testing if ADPs json is valid 
    $json = json_decode($jsondata); 
    if (json_last_error() === JSON_ERROR_NONE) { 
     // $json contains a valid json string. It's ready to use. 
     print_r($jobdata); 
    } else { 
     // oops, it's not valid JSON. 
     echo '<h2>'.'We\'re sorry. We are unable to list jobs right now. Please contact'.' <a href="mailto:[email protected]">[email protected]</a>'.'</h2>'; 
    } 
    ?> 

有没有办法可以解析无效的JSON?看来在某个地方有一个意想不到的支架。

+1

查找使用[JSONLint(http://jsonlint.com/)中的错误并修复创建它们的软件。尽管在技术上可以创建一个支架匹配清洁脚本,但可能无法明确地重新创建数据。 – jDo

+0

已经选中此[发布](http://stackoverflow.com/questions/17752948/php-invalid-characters-in-json-decode)? – Stacked

+0

JSON的重点在于它是一种标准化的格式。如果数据不符合标准,那么它不是JSON,PHP和其他语言的JSON解码函数只会抛出一个错误。无法让'json_decode()'接受无效的JSON字符串。您必须先修复JSON然后解码。 – Simba

回答

0

json_decode失败的原因。 你真的想反序列化格式错误的数据,并进一步根据你的逻辑数据

再次,之前手动解码任何检查以下内容:

  • 正在恢复中没有应用程序期望的编码数据的字符编码的服务器。特别是如果您的后端运行在基于Linux的服务器上,并且Windows上的第三方API运行时,您的应用程序内部逻辑没有进一步编码JSON。一个很好的尝试将是检查编码的HTML实体和/或它们与html_entity_decode()

从我的经验解码 - 如果这些问题仍然存在,尝试使用它能够自动前面提到的步骤,你的包装(并翻译半JSON表达式,如MongoDB的查询,JavaScript表达式):

https://github.com/zendframework/zend-json