标题: [文本处理] 【已解决】求助批处理提取JSON文件内特定文字后的信息 [打印本页]
作者: annwayili 时间: 2024-5-31 12:37 标题: 【已解决】求助批处理提取JSON文件内特定文字后的信息
基本情况:
文件是JSON,用记事本打开后,如下:(似乎是没有行的概念,整个文本就是一行/段)
[{"id":"e2e2ed190348ed30802f6f08f4f5c1b9","title":"中国证券监督管理委员会人才引进","enabled":1,"is_cloud_task":0,"url":"http://www.csrc.gov.cn/csrc/c100082/common_list.shtml?channelid=59b9842485ba41adad957f55cb90be52","icon":"http://www.csrc.gov.cn/favicon.ico","page":"","path":"div:nth-of-type(4)","ignore_path":"","click_path":"","data_path":"","scroll_down":"0","type":"dom","code":"200","json_query":"","json_header":"","json_data":"","json_data_format":"form","rss_field":"title","star":0,"ua":"","puppeteer_code":"","browser_code":"","shell_type":"javascript","shell_cookie_name":"COOKIE","shell_code":"","ai_prompt_on":"off","ai_prompt_user":"请提取返回值中的价格,并以数字形式返回。注意只返回数字,不要返回多余内容。返回值如下:{{value}}","replace_from_regex":"","replace_to_regex":"","tab_activity":"background","interval":"720","delay":"0","retry":10,"cron":"* * * * *".........(省略,此内容与上面的不重复)"last_time":1715225597400,"retry_times":0},{"id":"b96d4b076418874b2291e99362e86bf9","title":"重要通知-商务部外贸发展局","enabled":1,"is_cloud_task":0,"url":"https://www.tdb.org.cn/zytz/index.jhtml","icon":"https://www.tdb.org.cn/r/cms/www/default/img/favicon.ico","page":"","path":"div > div:nth-of-type(2) > div:nth-of-type(2) > div:nth-of-type(2) > div > ul","ignore_path":"","click_path":"","data_path":"","scroll_down":"0","type":"dom","code":"200","json_query":"","json_header":"","json_data":"","json_data_format":"form","rss_field":"title","star":0,"ua":"","puppeteer_code":"","browser_code":"","shell_type":"javascript","shell_cookie_name":"COOKIE","shell_code":"","ai_prompt_on":"off","ai_prompt_user":"请提取返回值中的价格,并以数字形式返回。注意只返回数字,不要返回多余内容。返回值如下:{{value}}","replace_from_regex":"","replace_to_regex".........(省略,此内容与上面的不重复)
具体要求:
1、提取,"title":后面的双引号内文字(不需要双引号)。
2、提取,"url":后面的双引号内网址(不需要双引号)。
3、以上两个提取内容之间加上一个空格以分隔。
4、提取文字及其后网址后,另起一行来提取下一个。
5、在每一行前面加上三位数的行号,以001开始(即不足三位则前面补0);同时加一个空格分开。
按上述,则提取后文字为:
001 中国证券监督管理委员会人才引进 http://www.csrc.gov.cn/csrc/c100082/common_list.shtml?channelid=59b9842485ba41adad957f55cb90be52
002 重要通知-商务部外贸发展局 https://www.tdb.org.cn/zytz/index.jhtml
6、最后在同级文件夹内生成相应TXT文件,以原文件名加上“内容提取”这四个字来重命名。比如原文件为“ABC.JSON”,则生成“ABC内容提取.txt”
7、最好是能把JSON拖到BAT文件上就能完成提取。
请大家帮忙一个!
谢谢!
网盘下载:
链接:https://pan.baidu.com/s/1BJ-6N2KLgoPIXCDMhU-HHA?pwd=4188
提取码:4188
--来自百度网盘超级会员V9的分享
作者: newswan 时间: 2024-5-31 12:43
发文件
用 powershell 可行
作者: annwayili 时间: 2024-5-31 13:00
回复 2# newswan
已上传至百度网盘。
作者: hfxiang 时间: 2024-5-31 14:10
回复 1# annwayili
用gawk5.1.0( http://bcn.bathome.net/tool/5.1.0/gawk.exe 经测试,只有这个链接的版本可实现,其它版本测试有问题)的实现方式如下:- gawk -v"RS=," -F"\042" "/\042title\042:\042/{A=$4}/\042url\042:\042/{if(A)print A,$4;A=\"\"}" Check.17152.json>link_out.txt
复制代码
作者: hfxiang 时间: 2024-5-31 14:18
回复 1# annwayili
如需行号,请用如下gawk5.1.0( http://bcn.bathome.net/tool/5.1.0/gawk.exe )脚本:- gawk -v"RS=," -F"\042" "/\042title\042:\042/{A=$4}/\042url\042:\042/{if(A)printf\"\04503d \045s \045s\n\",++i,A,$4;A=\"\"}" Check.17152.json>link_out.txt
复制代码
作者: annwayili 时间: 2024-5-31 15:51
本帖最后由 annwayili 于 2024-5-31 18:20 编辑
回复 5# hfxiang
谢谢!
系统WIN11X64, 改为下载gawk64程序了。
作者: 77七 时间: 2024-5-31 17:17
按要求7方式执行- @echo off
- rem "批处理保存为utf-8编码格式"
- chcp 65001 >nul
- for %%i in (%*) do (
- if exist "%%~i" (
- set n=
- (for /f tokens^=2^,8^,10delims^=^" %%a in ('powershell -c "(Get-Content '%%~i' -Encoding UTF8) -replace 'title', [Environment]::NewLine"') do (
- if /i "%%b" equ "url" (
- set /a n+=1001
- call echo %%n:~-3%% %%a %%c
- )
- ))>"%%~ni内容提取.txt"
- )
- )
- pause
复制代码
作者: annwayili 时间: 2024-5-31 17:23
本帖最后由 annwayili 于 2024-5-31 17:53 编辑
回复 7# 77七
非常好!
十分感谢!
补充一下,发现了一个小问题:
---有两个json文件生成的TXT,分别是从002、003打头开始
显然,BAT是正确识别了JSON前面还有要提取的内容
但不知为什么,不是从001开始。
这两个生成的TXT都是207行,实际应该是208行和209行才对。(再多的就没有试了,因为当前最大就是这两个文件了。)
---比上面两个文件稍小的JSON生成的TXT,正确地从001开始,至204行正确结束。
---其它文件更小一点,都正确生成。
作者: buyiyang 时间: 2024-5-31 17:40
本帖最后由 buyiyang 于 2024-5-31 18:05 编辑
5楼的代码用cmd执行,
这是powershell代码:- dir *.json|ForEach-Object{$i=0;(gc $_ -Encoding UTF8 |ConvertFrom-Json).checks.foreach({"{0:D3} {1} {2}" -f ++$i,$_.title,$_.url})|sc ($_.BaseName+'内容提取.txt')}
复制代码
作者: annwayili 时间: 2024-5-31 18:05
本帖最后由 annwayili 于 2024-5-31 18:12 编辑
回复 9# buyiyang
谢谢帮助! 这个powershell代码很好用!
把gawk64.exe复制到同一文件夹内,用CMD运行5楼的脚本,也成功生成正确内容的link_out文本文档了
作者: buyiyang 时间: 2024-5-31 18:09
回复 10# annwayili
9楼代码有个小问题,改了一下。
用gawk注意gawk.exe要在cmd工作目录。
作者: annwayili 时间: 2024-5-31 18:14
回复 11# buyiyang
再次感谢!刚好也复制程序去操作了
作者: 77七 时间: 2024-5-31 18:18
回复 8# annwayili
应该是文本没那么规律。用其它脚本就好。
作者: annwayili 时间: 2024-5-31 18:26
回复 13# 77七
效果很不错了!拖曳很方便!!
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |