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

java中JSON字符串处理的踩坑

在处理JSON字符串的时候,读取的数据原封不动每一行是,前后有两个引号

"{\"cuidC54E92418CA1CD099A5AFC4D2F322015|VECB5VMT4\": {\"REFINED_APPLIST_TIMESTAMP\": 1756716480, \"DEVICE_INFO\": {\"SOURCE\": 131072, \"brand\": \"华为荣耀\", \"model\": \"200\", \"last_ts\": 1757347200}, \"APPLIST\": {\"手机淘宝\": {\"FIRST_IN\": 1724342400, \"SOURCE\": 4194304, \"LAST_IN\": 1756742400, \"PACKAGE_NAME\": [\"com.taobao.taobao\"]}, \"UC浏览器\": {\"FIRST_IN\": 1724342400, \"SOURCE\": 4194304, \"LAST_IN\": 1756742400, \"PACKAGE_NAME\": [\"com.UCMobile\"]}, \"百度地图\": {\"FIRST_IN\": 1724342400, \"SOURCE\": 4194304, \"LAST_IN\": 1756742400, \"PACKAGE_NAME\": [\"com.baidu.BaiduMap\"]}, \"京东\": {\"FIRST_IN\": 1724342400, \"SOURCE\": 4194304, \"LAST_IN\": 1756742400, \"PACKAGE_NAME\": [\"com.jingdong.app.mall\"]}, \"喜马拉雅\": {\"FIRST_IN\": 1724342400, \"SOURCE\": 4194304, \"LAST_IN\": 1756742400, \"PACKAGE_NAME\": [\"com.ximalaya.ting.android\"]}, \"番茄畅听\": {\"FIRST_IN\": 1724342400, \"SOURCE\": 4194304, \"LAST_IN\": 1756742400, \"PACKAGE_NAME\": [\"com.xs.fm\"]}, \"哔哩哔哩\": {\"FIRST_IN\": 1724342400, \"SOURCE\": 4194304, \"LAST_IN\": 1756742400, \"PACKAGE_NAME\": [\"tv.danmaku.bili\"]}, \"小红书\": {\"FIRST_IN\": 1724342400, \"SOURCE\": 4194304, \"LAST_IN\": 1756742400, \"PACKAGE_NAME\": [\"com.xingin.xhs\"]}, \"抖音极速版\": {\"FIRST_IN\": 1724342400, \"SOURCE\": 4194304, \"LAST_IN\": 1756742400, \"PACKAGE_NAME\": [\"com.ss.android.ugc.aweme.lite\"]}, \"唯品会\": {\"FIRST_IN\": 1724342400, \"SOURCE\": 4194304, \"LAST_IN\": 1756742400, \"PACKAGE_NAME\": [\"com.achievo.vipshop\"]}, \"腾讯视频\": {\"FIRST_IN\": 1724342400, \"SOURCE\": 4194304, \"LAST_IN\": 1756742400, \"PACKAGE_NAME\": [\"com.tencent.qqlive\"]}, \"淘宝直播\": {\"FIRST_IN\": 1724342400, \"SOURCE\": 4194304, \"LAST_IN\": 1756742400, \"PACKAGE_NAME\": [\"com.taobao.live\"]}, \"爱奇艺\": {\"FIRST_IN\": 1724342400, \"SOURCE\": 4194304, \"LAST_IN\": 1756742400, \"PACKAGE_NAME\": [\"com.qiyi.video\"]}, \"快手\": {\"FIRST_IN\": 1724342400, \"SOURCE\": 4194304, \"LAST_IN\": 1756742400, \"PACKAGE_NAME\": [\"com.smile.gifmaker\"]}, \"美团\": {\"FIRST_IN\": 1724342400, \"SOURCE\": 4194304, \"LAST_IN\": 1756742400, \"PACKAGE_NAME\": [\"com.sankuai.meituan\"]}, \"番茄免费小说\": {\"FIRST_IN\": 1724342400, \"SOURCE\": 4194304, \"LAST_IN\": 1756742400, \"PACKAGE_NAME\": [\"com.dragon.read\"]}, \"百度\": {\"FIRST_IN\": 1724342400, \"SOURCE\": 4194304, \"LAST_IN\": 1756742400, \"PACKAGE_NAME\": [\"com.baidu.searchbox\"]}, \"抖音短视频\": {\"FIRST_IN\": 1724342400, \"SOURCE\": 4194304, \"LAST_IN\": 1756742400, \"PACKAGE_NAME\": [\"com.ss.android.ugc.aweme\"]}, \"支付宝\": {\"FIRST_IN\": 1724342400, \"SOURCE\": 4194304, \"LAST_IN\": 1756742400, \"PACKAGE_NAME\": [\"com.eg.android.AlipayGphone\"]}, \"今日头条\": {\"FIRST_IN\": 1724342400, \"SOURCE\": 4194304, \"LAST_IN\": 1756742400, \"PACKAGE_NAME\": [\"com.ss.android.article.news\"]}, \"携程旅行\": {\"FIRST_IN\": 1724342400, \"SOURCE\": 4194304, \"LAST_IN\": 1756742400, \"PACKAGE_NAME\": [\"ctrip.android.view\"]}, \"头条搜索极速版\": {\"FIRST_IN\": 1724342400, \"SOURCE\": 4194304, \"LAST_IN\": 1756742400, \"PACKAGE_NAME\": [\"com.ss.android.article.lite\"]}, \"酷狗音乐\": {\"FIRST_IN\": 1753718400, \"SOURCE\": 4194304, \"INSTALL_ACTION\": 1753718400, \"LAST_IN\": 1756742400, \"PACKAGE_NAME\": [\"com.kugou.android\"]}}, \"MAPPING_SCORE\": 100, \"LAST_ACTIVE_DAY\": \"7\", \"UNINSTALL_APPLIST\": {\"中国银行\": {\"FIRST_IN\": 1741017600, \"SOURCE\": 4194304, \"INSTALL_ACTION\": 1741017600, \"LAST_IN\": 1753718400, \"PACKAGE_NAME\": [\"com.chinamworld.bocmbci\"]}, \"微信\": {\"FIRST_IN\": 1741017600, \"SOURCE\": 4194304, \"INSTALL_ACTION\": 1741017600, \"LAST_IN\": 1753718400, \"PACKAGE_NAME\": [\"com.tencent.mm\"]}, \"中国移动\": {\"FIRST_IN\": 1741017600, \"SOURCE\": 4194304, \"INSTALL_ACTION\": 1741017600, \"LAST_IN\": 1753718400, \"PACKAGE_NAME\": [\"com.greenpoint.android.mc10086.activity\"]}}}}"

image

 

将这个字符串放在 https://www.sojson.com/ 是可以正常解析的,但是在代码中怎么都解析不了。

实际上将这一行内容读取到代码中会添加很多转义字符

image

 

需要将字符串进行清洗

// 解析JSON为根对象(设备ID的Map)String trimmedLine = line;if (trimmedLine.startsWith("\"") && trimmedLine.endsWith("\"")) {trimmedLine = trimmedLine.substring(1, trimmedLine.length() - 1);}String cleanedJson = trimmedLine.replaceAll("\\\\\"", "\"");ObjectMapper objectMapper = new ObjectMapper();try {// 将 JSON 字符串解析为 JsonNodeJsonNode rootNode = objectMapper.readTree(cleanedJson);// 遍历每一个设备 IDIterator<Map.Entry<String, JsonNode>> fields = rootNode.fields();while (fields.hasNext()) {Map.Entry<String, JsonNode> entry = fields.next();String deviceId = entry.getKey();JsonNode deviceNode = entry.getValue();System.out.println("设备 ID: " + deviceId);// 获取应用列表JsonNode appListNode = deviceNode.get("APPLIST");if (appListNode != null) {Iterator<Map.Entry<String, JsonNode>> appFields = appListNode.fields();while (appFields.hasNext()) {Map.Entry<String, JsonNode> appEntry = appFields.next();String appName = appEntry.getKey();JsonNode appInfo = appEntry.getValue();// 检查TYPE字段是否存在且不为nullif (appInfo.has("TYPE") && !appInfo.get("TYPE").isNull()) {int typeValue = appInfo.get("TYPE").asInt();System.out.println("  应用名称: " + appName + ", TYPE: " + typeValue);}}}}} catch (Exception e) {e.printStackTrace();}

  

http://www.zskr.cn/news/2943.html

相关文章:

  • S7-1500 TRACE功能组态 (转载)
  • SAP-PO:怎么控制传输的内容在单数据情况下是数组格式还是单对象格式
  • 创建逻辑卷
  • Server 13 ,CentOS 上使用 Nginx 部署多个前端项目完整指南( 协助多端口与脚本自动化 )
  • WGCLOUD的告警日志在哪儿存贮的?
  • HarmonyOS 5分布式数据管理初探:实现跨设备数据同步
  • 复盘我的第一个 大模型Agent:从核心循环到模块化架构的演进之路
  • Docker 容器化
  • phpmyadmin漏洞利用
  • Wireshark 学习笔记(二)
  • ubuntu24.04安装mysql5.7.42
  • AC-DC整流器双闭环控制MATLAB/Simulink仿真
  • rabbitMQ-基础day1 - a
  • 实用指南:Nginx反向代理与负载均衡部署
  • bluetoothctl UUIDs
  • ubuntu22挂载windows server2019的共享文件夹
  • 下载视频
  • 1 | 移动语义:浅拷贝,深拷贝和引用拷贝,左值和右值
  • 正则表达式基础
  • 即时通讯管理平台(后台管理)介绍文档
  • 202312_DASCTF_找找找
  • pyinstaller 打包
  • 模拟运输振动试验台:保障产品运输安全的关键设备
  • wpf xaml数据绑定时,寻找数据源的几种方式 (RelativeSource)
  • 背负冲击试验机的设计原理与性能优化
  • LangChain
  • 军工企业涉密网文件导出用什么系统?答案在这里
  • Gateway 网关坑我! 被这个404 问题折腾了一年?
  • LangChain DIfy区别
  • 2008-2025年各省高考真题含解析