Board logo

标题: [文本处理] 新人求助BAT如何取JSON对象 [打印本页]

作者: jkpan    时间: 2021-8-15 10:31     标题: 新人求助BAT如何取JSON对象

本帖最后由 jkpan 于 2021-8-15 14:58 编辑

BAT发起get请求返回 JSON数据如何取JSON对象?
比如我发起一个请求
https://json.m3u8.tv:7788/json.php?url=https://v.qq.com/x/cover/mzc00200lxzhhqz/w0040l6kwqw.html

返回数据如下

{"code":200,"url":"https:\/\/cdn.oss-cn-hangzhou.myqcloud.com.xuetuiguang.cn\/m3u8video\/shfb07.m3u8","type":"hls","player":"M3U8.TV","msg":"\u6570\u636e\u6b63\u5e38","title":"\u76f4\u94feM3U8\u64ad\u653e"}

我需要把: code、url、type、player 的对象值取出来赋值给变量怎么写,求大佬赐教、这玩意没Linux的好写的
求助要最简单,且不用安装其他扩展的方法!
win下awk、sed、grep、好像都要安装,有其他方法吗,比如字符串截取,先删除URL:然后再删除尾部的,以后的内容,又或者时取两个字符中间文本,不会BAT求助
作者: cmd1152    时间: 2021-8-15 10:38

  1. URL=https:\/\/subtitle.apdcdn.tc.qq.com\/vipzj.video.tc.qq.com\/gzc_1000102_0b53fmadmaaa6uakyiywrzq4ak6dgytqamsa.f2.mp4?vkey=F826AD23AB39A16CA31C7BF02771C96D855A8BF471723D39DE1686CF21ABC04DC9EEC07EFF9DEED81B5FC657BEC3A4F2267C4F4E8CCBED53EA49D5A78BA38951DFD933B5A95B58698C188E8E604DE17A1B83CBB4521CE89E2A30D32E1FA3340C53641E2323CCD0968FBD5A1328C7C58F03799887BE48DE77&from=WWW.M3U8.TV
复制代码
  1. code=200
复制代码
  1. type=M3U8TV
复制代码
  1. msg=www.m3u8.tv\u65e0\u5e7f\u544a\u89e3\u6790!
复制代码
  1. title=\u817e\u8baf\u89c6\u9891
复制代码

作者: newswan    时间: 2021-8-15 11:00

powershell
  1. $file =  "1.txt"
  2. (get-content -path $file | ConvertFrom-Json ).url
复制代码

作者: jkpan    时间: 2021-8-15 13:54

回复 2# cmd1152
我知道解析出来是这个,我是说我发起GET请求,返回的是JSON数据我要解析,取对应的值
比如发起这个请求,
https://json.m3u8.tv:7788/json.php?url=https://v.qq.com/x/cover/mzc00200lxzhhqz/d0040q5zhb7.html
返回
{"code":200,"url":"https:\/\/cdn.oss-cn-hangzhou.myqcloud.com.xuetuiguang.cn\/m3u8video\/shfb10.m3u8","type":"hls","player":"M3U8.TV","msg":"\u6570\u636e\u6b63\u5e38","title":"\u76f4\u94feM3U8\u64ad\u653e"}
我需要取,code、url、type的值,再不安装第三方插件的情况下,怎么取的,
作者: jkpan    时间: 2021-8-15 13:57

回复 3# newswan

大佬,你这个确实可以,我需要在CMD运行的有吗!感谢大佬
作者: idwma    时间: 2021-8-15 16:09

  1. @echo off
  2. for /f tokens^=2^,4^,5^,7^ delims^=^:^,^"^{^} %%a in ('"echo;{"code":200,"url":"https:\/\/cdn.oss-cn-hangzhou.myqcloud.com.xuetuiguang.cn\/m3u8video\/shfb07.m3u8","type":"hls","player":"M3U8.TV","msg":"\u6570\u636e\u6b63\u5e38","title":"\u76f4\u94feM3U8\u64ad\u653e"}"') do echo %%a %%b:%%c %%d
  3. pause
复制代码

作者: newswan    时间: 2021-8-15 17:05

回复 5# jkpan
  1. @cd /d %~dp0 & powershell -NoProfile -ExecutionPolicy Bypass -command "Get-Content '%~f0' | Select-Object -Skip 1 | Out-String | Invoke-Expression" & pause & exit/b
  2. $file =  "1.txt"
  3. (get-content -path $file | ConvertFrom-Json ).url
复制代码

作者: jkpan    时间: 2021-8-15 19:58

回复 7# newswan


大佬这个好像在CMD命令行跑不了,
其实我就是想发起一个GET请求  返回取返回的URL和CODE   TYPE的值赋值给一个变量,看来是没法搞了
https://json.m3u8.tv:7788/json.php?url=https://v.qq.com/x/cover/mzc00200lxzhhqz/w0040l6kwqw.html
返回数据如下
{"code":200,"url":"https:\/\/cdn.oss-cn-hangzhou.myqcloud.com.xuetuiguang.cn\/m3u8video\/shfb07.m3u8","type":"hls","player":"M3U8.TV","msg":"\u6570\u636e\u6b63\u5e38","title":"\u76f4\u94feM3U8\u64ad\u653e"}
我需要把: code、url、type、player 的对象值取出来赋值给变量怎么写
作者: jkpan    时间: 2021-8-15 19:58

本帖最后由 jkpan 于 2021-8-15 20:23 编辑

回复 6# idwma
win10  果然可以   我学习学习  套一下看能不能搞再来请教呢!已经快接近成功了,只是我返回值有可能顺序和这个不一样,如果能以CODE  URL   TYPE这眼的关键词去取就完美了
作者: Batcher    时间: 2021-8-15 21:01

回复 1# jkpan


Win下gawk、sed、grep下载即用,不需要安装:
http://bcn.bathome.net/s/tool/index.html?key=gawk
http://bcn.bathome.net/s/tool/index.html?key=sed
http://bcn.bathome.net/s/tool/index.html?key=grep

处理JSON也可以用这个:
http://bcn.bathome.net/s/tool/index.html?key=jq
作者: idwma    时间: 2021-8-15 21:40

回复 9# jkpan
  1. 1<1/* :
  2. @echo off
  3. echo;"{"code":200,"url":"https:\/\/cdn.oss-cn-hangzhou.myqcloud.com.xuetuiguang.cn\/m3u8video\/shfb07.m3u8","type":"hls","player":"M3U8.TV","msg":"\u6570\u636e\u6b63\u5e38","title":"\u76f4\u94feM3U8\u64ad\u653e"}"|cscript /nologo /e:jscript "%~f0"
  4. pause
  5. goto :eof
  6. */
  7. var stdout=WScript.StdOut,stdin=WScript.StdIn;
  8. var reg=/.*url":"(.*?)".*/;
  9. var reg1=/.*type":"(.*?)".*/;
  10. var reg2=/.*code":(.*?),".*/;
  11. while (!stdin.AtEndOfStream){
  12. var str = stdin.ReadLine();
  13. if(reg.test(str))stdout.WriteLine(str.replace(reg, '$1'));
  14. if(reg1.test(str))stdout.WriteLine(str.replace(reg1, '$1'));
  15. if(reg2.test(str))stdout.WriteLine(str.replace(reg2, '$1'));
  16. }
复制代码





欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2