当前位置: 首页 > 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.wxhsa.cn/company.asp?id=1870

相关文章:

  • 11111
  • 阿里云微服务引擎 MSE 及 API 网关 2025 年 8 月产品动态
  • TIA Portal中S7-1500F CPU与ET200SP安全模块的配置例程(转载)
  • 获取第一个运行的Word应用程序实例
  • S7-1500 TRACE功能组态 (转载)
  • 如何在Proxmox VE中使用fdisk命令行扩展LVM存储池 - 若
  • 垃圾AV覆盖defender
  • SAP-PO:怎么控制传输的内容在单数据情况下是数组格式还是单对象格式
  • 开源新基建:数字中国创新发展的底层密码与生态实践
  • 员工离职停用Salesforce帐号?这11个“坑”千万别踩!
  • Linux的运行模式
  • Spring Boot + MybatisX,效率翻倍!
  • 条码控件Aspose.BarCode教程:使用 Java 自动生成 DotCode 条形码
  • AI 玩转网页自动化无压力:基于函数计算 FC 构建 Browser Tool Sandbox
  • AI时代的全栈框架:独立开发者的机会与挑战
  • 创建逻辑卷
  • Server 13 ,CentOS 上使用 Nginx 部署多个前端项目完整指南( 协助多端口与脚本自动化 )
  • 洛谷P2490 [SDOI2011] 黑白棋
  • WGCLOUD的告警日志在哪儿存贮的?
  • 传统软件部署的痛点
  • HarmonyOS 5分布式数据管理初探:实现跨设备数据同步
  • qoj965 Trade
  • 复盘我的第一个 大模型Agent:从核心循环到模块化架构的演进之路
  • Linux内核不使用bear如何快速生成compile_commands.json使用vscode阅读源码
  • Docker 容器化
  • phpmyadmin漏洞利用
  • CF19E Fairy
  • Wireshark 学习笔记(二)
  • 鸿蒙应用开发从入门到实战(三):第一个鸿蒙应用
  • Litctf2025 Write-up