在处理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\"]}}}}"
将这个字符串放在 https://www.sojson.com/ 是可以正常解析的,但是在代码中怎么都解析不了。
实际上将这一行内容读取到代码中会添加很多转义字符
需要将字符串进行清洗
// 解析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();}