当前位置: 首页 > news >正文

采集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
http://www.lryc.cn/news/513147.html

相关文章:

  • Java中实现对象的深拷贝(Deep Copy)
  • 位置编码-APE
  • MySQL有哪些锁?
  • Everything实现,快速搜索文件
  • [硬件] DELL BIOS 相关注意事项
  • Rocky Linux 下安装Liboffice
  • 【每日学点鸿蒙知识】长时任务、HarmonyAppProvision申请、preferences、Testing工具、应用保活
  • 步进电机驱动算法——S形加减速算法原理
  • 【图像去噪】论文复现:大道至简!ZS-N2N的Pytorch源码复现,跑通源码,获得指标计算结果,补充保存去噪结果图像代码,代码实现与论文理论对应!
  • 2024年中国新能源汽车用车发展怎么样 PaperGPT(一)
  • 数据结构-排序思想
  • python 快速排序(Quick Sort)
  • MySQL数据库——常见慢查询优化方式
  • 【AIGC篇】AIGC 引擎:点燃创作自动化的未来之火
  • C语言性能优化:从基础到高级的全面指南
  • 常用的公共 NTP(网络时间协议)服务器
  • Kafka中的Topic和Partition有什么关系?
  • Unity 使用UGUI制作卷轴开启关闭效果
  • MarkDown怎么转pdf;Mark Text怎么使用;
  • 整合版canal ha搭建--基于1.1.4版本
  • QGIS移动图元功能
  • 【模电刷题复习--填空】
  • shardingsphere-jdbc-core-spring-boot-starter的性能问题(理论)
  • Java Map 集合详解:基础用法、常见实现类与高频面试题解析
  • 一款基于.Net方便、快捷的数据库文档查询、生成工具
  • Linux平台下实现的小程序-进度条
  • Ubuntu 22.04.5 修改IP
  • 解决virtualbox出现开启DHCP之后ubuntu虚拟机之后IP重复的问题
  • Java开发工具-Jar命令
  • UE5通过蓝图节点控制材质参数