找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 19000|回复: 13

[文本处理] 【已解决】求助批处理提取JSON文件内特定文字后的信息

[复制链接]
发表于 2024-5-31 12:37:32 | 显示全部楼层 |阅读模式
基本情况:
文件是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的分享

评分

参与人数 1PB +2 收起 理由
Batcher + 2 感谢给帖子标题标注[已解决]字样

查看全部评分

发表于 2024-5-31 12:43:15 | 显示全部楼层
发文件
用 powershell 可行
 楼主| 发表于 2024-5-31 13:00:12 | 显示全部楼层
回复 2# newswan

已上传至百度网盘。
发表于 2024-5-31 14:10:08 | 显示全部楼层
回复 1# annwayili

用gawk5.1.0( http://bcn.bathome.net/tool/5.1.0/gawk.exe 经测试,只有这个链接的版本可实现,其它版本测试有问题)的实现方式如下:

  1. 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
复制代码
发表于 2024-5-31 14:18:49 | 显示全部楼层
回复 1# annwayili
如需行号,请用如下gawk5.1.0( http://bcn.bathome.net/tool/5.1.0/gawk.exe )脚本:

  1. 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
复制代码

评分

参与人数 1技术 +1 收起 理由
Batcher + 1 乐于助人

查看全部评分

 楼主| 发表于 2024-5-31 15:51:25 | 显示全部楼层
本帖最后由 annwayili 于 2024-5-31 18:20 编辑

回复 5# hfxiang


    谢谢!

    系统WIN11X64,  改为下载gawk64程序了。
发表于 2024-5-31 17:17:39 | 显示全部楼层
按要求7方式执行
  1. @echo off
  2. rem "批处理保存为utf-8编码格式"
  3. chcp 65001 >nul
  4. for %%i in (%*) do (
  5.         if exist "%%~i" (
  6.                 set n=
  7.                 (for /f tokens^=2^,8^,10delims^=^" %%a in ('powershell -c "(Get-Content '%%~i' -Encoding UTF8) -replace 'title', [Environment]::NewLine"') do (
  8.                         if /i "%%b" equ "url" (
  9.                                 set /a n+=1001
  10.                                 call echo %%n:~-3%% %%a %%c
  11.                         )
  12.                 ))>"%%~ni内容提取.txt"
  13.         )
  14. )
  15. pause

复制代码

评分

参与人数 1技术 +1 收起 理由
Batcher + 1 乐于助人

查看全部评分

 楼主| 发表于 2024-5-31 17:23:44 | 显示全部楼层
本帖最后由 annwayili 于 2024-5-31 17:53 编辑

回复 7# 77七


    非常好!
    十分感谢!



补充一下,发现了一个小问题:
---有两个json文件生成的TXT,分别是从002、003打头开始
    显然,BAT是正确识别了JSON前面还有要提取的内容
    但不知为什么,不是从001开始。
    这两个生成的TXT都是207行,实际应该是208行和209行才对。(再多的就没有试了,因为当前最大就是这两个文件了。)
---比上面两个文件稍小的JSON生成的TXT,正确地从001开始,至204行正确结束。
---其它文件更小一点,都正确生成。
发表于 2024-5-31 17:40:07 | 显示全部楼层
本帖最后由 buyiyang 于 2024-5-31 18:05 编辑

5楼的代码用cmd执行,

这是powershell代码:
  1. dir *.json|ForEach-Object{$i=0;(gc $_ -Encoding UTF8 |ConvertFrom-Json).checks.foreach({"{0:D3} {1} {2}"  -f ++$i,$_.title,$_.url})|sc ($_.BaseName+'内容提取.txt')}
复制代码

评分

参与人数 1技术 +1 收起 理由
Batcher + 1 乐于助人

查看全部评分

 楼主| 发表于 2024-5-31 18:05:11 | 显示全部楼层
本帖最后由 annwayili 于 2024-5-31 18:12 编辑

回复 9# buyiyang


谢谢帮助! 这个powershell代码很好用!

把gawk64.exe复制到同一文件夹内,用CMD运行5楼的脚本,也成功生成正确内容的link_out文本文档了
发表于 2024-5-31 18:09:00 | 显示全部楼层
回复 10# annwayili


    9楼代码有个小问题,改了一下。
用gawk注意gawk.exe要在cmd工作目录。
 楼主| 发表于 2024-5-31 18:14:16 | 显示全部楼层
回复 11# buyiyang


    再次感谢!刚好也复制程序去操作了
发表于 2024-5-31 18:18:09 | 显示全部楼层
回复 8# annwayili


   应该是文本没那么规律。用其它脚本就好。
 楼主| 发表于 2024-5-31 18:26:35 | 显示全部楼层
回复 13# 77七


    效果很不错了!拖曳很方便!!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-18 01:19 , Processed in 0.021839 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表