如何用正则表达式缩减Google位置历史JSON大文件体积?
处理巨型Google位置历史JSON的正则方案(避免内存崩溃)
我完全懂你这种崩溃的感受——几十MB的JSON硬塞给GUI工具,要么直接无响应,要么加载半天后炸掉。用正则流式处理是个聪明的思路,核心就是不把整个文件加载进内存,逐块匹配提取你要的活动数据,下面给你具体的实操方案:
核心思路
Google的位置历史JSON结构里,activitySegment(或者你要的其他活动节点)都是独立的结构化块,我们可以用正则精准匹配这些块,再通过命令行工具流式扫描文件,全程不占太多内存。
步骤1:确定目标匹配规则
假设你要提取的是activitySegment相关的活动数据,先写一个能精准匹配这类块的正则:
"activitySegment":\{[^{}]*("activityType":"[^"]*"|[^{}])*\}
正则解释:
"activitySegment":\{:匹配活动块的起始标记[^{}]*:匹配块内非大括号的内容("activityType":"[^"]*"|[^{}])*:确保捕获到activityType这类关键字段,同时兼容块内的其他内容(避免漏匹配)\}:匹配块的结束标记
如果你的目标是其他活动节点(比如placeVisit),把开头的"activitySegment"换成对应的字段名就行。
步骤2:用命令行工具执行提取(无内存压力)
别用Notepad++这类GUI工具了,命令行工具天生适合流式处理大文件,不会崩溃:
Windows(PowerShell)
打开PowerShell,切换到JSON文件所在目录,执行:
Select-String -Path "YourLocationHistory.json" -Pattern '"activitySegment":\{[^{}]*("activityType":"[^"]*"|[^{}])*\}' -AllMatches | ForEach-Object { $_.Matches.Value } | Out-File "ExtractedActivities.json"
Linux/macOS(终端)
执行:
grep -o '"activitySegment":\{[^{}]*("activityType":"[^"]*"|[^{}])*\}' YourLocationHistory.json > ExtractedActivities.json
这些命令会逐行扫描你的大JSON文件,把匹配到的所有活动块提取出来,保存到ExtractedActivities.json里,全程内存占用极低。
步骤3:整理提取结果(可选)
提取出来的是一行行独立的JSON块,如果你需要合法的JSON数组,可以手动给文件开头加[,结尾加],然后在每个块之间加逗号(或者用简单的脚本批量处理),之后就能用普通的JSON工具打开分析了。
注意事项
- 先拿一小段JSON测试你的正则,确保能正确匹配到目标内容再跑全量;
- 如果活动块里有多层嵌套的大括号,可能需要调整正则(比如用递归匹配),但Google位置历史的
activitySegment结构相对简单,上面的正则基本够用; - 要是你需要更复杂的过滤(比如只提取
activityType为WALKING的记录),可以在正则里加条件,比如把"activityType":"[^"]*"换成"activityType":"WALKING"。
内容的提问来源于stack exchange,提问作者ashleedawg
相关产品推荐
相关产品推荐

