采集JSON解析错误的修复

两段采集来的JSON格式:

一:

复制代码
{"hwgOnlineId":"554312", "jiwuChatId":"", "phoneCategoryId":"20006", "cuxiaoSeq":{voucherTitle:1,lh

二:

复制代码
{"pic":"//imgservice.suning.cn/uimg1/b2c/image/rX4cM65dyr_4kndNFwLEgA.jpg_400w_400h_4e",
	 "itemDomain":"//"+document.location.hostname,
	 "resRoot":"//script.suning.cn/project/pdsWeb",
	 "shopCount":1,
	 "sslStoreCode":"",
	 "addCartNumLimit":"199",
	 "favoriteStatusSwitch":"1" == "1",
	 "thirdEVoucherFlag":"",
	 "specialSSLFlag":"",
	 "sslLabelText" : "苏宁服务"}

直接使用PHP的json_decode报错

解决思路:

1、手动格式化,将所有","换行

2、半分法删除内容定位报错的代码行

3、找到问题行后过滤格式处理

4、对于json格式中掺杂了javascript代码的情况还可以直接使用v8js引擎处理

解决方案一(修复格式):

复制代码
$str = file_get_contents('test.txt');
 
$str = preg_replace('@/\*[^/]+\*/@isU','',$str);
 
$str = str_replace('"+document.location.hostname','"',$str);
 
$str = str_replace('"1" == "1"','true',$str);
 
$json = json_decode($str);
 
if(!$json) $json = json2array($str);
 
var_dump(getJsJSON($json));

解决方案二(使用PHP-V8JS扩展):

复制代码
//以JavaScript环境执行JS
function getJsJSON($str){
    $v8 = new V8Js();
    $func = "
        function getJsJSON(str){
         document ={location:{hostname:''}}
         a={$str}
         return JSON.stringify(a);
        }
        b = getJsJSON()
   ";
 
   try {
        //传递参数给js
        // $v8->str = $str;
        //执行js
        $code = $v8->executeString($func);
        //清空对象,垃圾回收。
        unset($v8);
    } catch (V8JsScriptException $e) {        
         dump($e->getMessage());
         dump($e->getJsSourceLine());
         dump($e->getJsTrace());
         // dump($e);
      }
    if($code)$code=json_decode($code,true);  
    return $code;
}
 
 
$js = file_get_contents('test.txt');
var_dump(getJsJSON($js));

o0b.cn/ibrad
相关推荐
辞旧 lekkk6 小时前
【Qt】信号和槽
linux·开发语言·数据库·qt·学习·mysql·萌新
2zcode7 小时前
运动模糊图像复原的MATLAB仿真与优化
开发语言·matlab
袁雅倩19977 小时前
当吸尘器、筋膜枪都用上Type-C,供电方案该怎么选?浅谈PD取电芯片ECP5702的应用
c语言·开发语言·支持向量机·动态规划·推荐算法·最小二乘法·图搜索算法
Aaswk8 小时前
Java Lambda 表达式与流处理
java·开发语言·python
万邦科技Lafite8 小时前
京东item_get接口实战案例:实时商品价格监控全流程解析
java·开发语言·数据库·python·开放api·淘宝开放平台
Cyber4K9 小时前
【Python专项】进阶语法-系统资源监控与数据采集(1)
开发语言·python·php
Le_ee10 小时前
ctfweb:php/php短标签/.haccess+图片马/XXE
开发语言·前端·php
yong999010 小时前
MATLAB读取高光谱图像
开发语言·matlab
2zcode11 小时前
基于MATLAB的肝病风险评估与分期分析系统设计与实现
开发语言·matlab
小小de风呀11 小时前
de风——【从零开始学C++】(五):内存管理
开发语言·c++