标题: [文本处理] 批处理BAT如何使用VBS(或者纯vbs)解析还原JSON [打印本页]
作者: kaze 时间: 2019-3-10 14:30 标题: 批处理BAT如何使用VBS(或者纯vbs)解析还原JSON
本帖最后由 kaze 于 2019-4-29 12:52 编辑
想要弄一个BAT如何使用VBS(或者纯vbs)解析JSON,因为JAVASCRIPT解析非常方便
var obj = JSON.parse(ds);
弄了一段代码,但是不知道为什么就是不成功,
要求不要已经发布的纯BAT代码,非常复杂,看不懂,基本不能通用。有没有人能够帮忙修改一下代码- <!-- :
- @echo off
- echo 取金山词霸每日一句数据
- pause
- set www=
- set /p www=输入 "天数"
- echo %www%
- echo;%www%|mshta "%~f0"
- exit /b
- -->
-
- <script>
- var fso = new ActiveXObject("Scripting.FileSystemObject");
- var StdIn = fso.GetStandardStream(0);
- var StdOut = fso.GetStandardStream(1);
- var url=StdIn.ReadLine();
-
- function Get(N) {var X = new ActiveXObject("Msxml2.XMLHTTP");
- X.open("GET", N, false);
- X.send("");
- return X.responseText;
- }
-
- var s1='1';
- var d={};
- for (var i = 0; i < 10; i++) {
- date = new Date();
- yd = +date - 86400000*i;
- d = new Date(yd);
- var yd= d.getFullYear()+"-"+(d.getMonth()+1)+"-"+d.getDate();
- url = "http://open.iciba.com/dsapi/?date="+yd;
- ds = Get(url);
- if (ds){
- //var obj = JSON.parse(ds);
- //var MottoEN=obj.content;
-
-
- var d[i]=ds;
- var data=d[i]+"\n";
- }
- }
-
- fso.CreateTextFile('X:\ciba.txt',2,true).Write(data);
- close();
- </script>
复制代码
作者: zaqmlp 时间: 2019-3-10 15:51
- /*&cls
- @echo off
- title 代码可用,扫码头像,感谢赞助;有什么问题,可加QQ956535081及时沟通
- cd /d "%~dp0"
- cscript -nologo -e:jscript "%~f0" 30
- pause&exit /b
- */
-
- var fso=new ActiveXObject('Scripting.FileSystemObject');
- var http=new ActiveXObject('MSXML2.XMLHTTP');
- var today=new Date();
- var result='', n=WSH.Arguments(0);
-
- for(var i=0;i<Number(n);i++){
- var day=new Date(today-86400000*i);
- var tmpday=day.getFullYear()+"-"+(day.getMonth()+1)+"-"+day.getDate();
- var daily=getinfo(gettext(tmpday));
- result+=daily+'\r\n\r\n';
- }
-
- //WSH.echo(result);
- var f=fso.CreateTextFile('dailysentence.txt', 2, true);
- f.Write(result);
- f.Close();
- WSH.Quit();
-
-
- function gettext(d){
- var url='http://open.iciba.com/dsapi/?date='+d;
- var text='';
- http.open('Get', url, false)
- http.send();
- text=http.responseText;
- return text;
- }
-
- function getinfo(s){
- var json=eval('('+s+')');
- var content=json['content'];
- var note=json['note'];
- var translation=json['translation'];
- var dateline=json['dateline'];
- return content+'\r\n'+note+'\r\n'+translation;
- }
复制代码
作者: kaze 时间: 2019-3-10 18:31
本帖最后由 kaze 于 2019-3-10 18:47 编辑
回复 2# zaqmlp
谢谢, 很完美,关键一句话 var json=eval('('+s+')'); 虽然不太懂,但是套用一下拉网站数据足够了,for循环怎么倒序呢?
搜了一下,for(var i=Number(n);i>=0;i--)完美解决,
作者: WHY 时间: 2019-3-11 01:29
vbs- rem On Error Resume Next
-
- Dim http, html, strOut, i, dt, ymd, url
- Set http = CreateObject("Msxml2.XMLHTTP")
- Set html = CreateObject("htmlfile")
- strOut = ""
-
- For i = 0 To 9
- dt = DateAdd("d", -i, date)
- ymd = Year(dt) & "-" & Right(Month(dt) + 100, 2) & "-" & Right(Day(dt) + 100, 2)
- url = "http://open.iciba.com/dsapi/?date=" & ymd
- http.open "GET", url, False
- http.send
- strOut = GetJSON(http.responseText) & vbCrLf & vbCrLf & strOut
- Next
-
- Function GetJSON(txt)
- Dim window, json
- Set window = html.parentWindow
- window.execScript "var json = " & txt, "JScript"
- Set json = window.json
- GetJSON = json.content & vbCrLf & json.note & vbCrLf
- GetJSON = GetJSON & json.translation & vbCrLf & json.dateline
- End Function
-
- Dim fso
- Set fso = CreateObject("Scripting.FileSystemObject")
- fso.CreateTextFile("ciba.Log", 2, True).Write(strOut)
-
- MsgBox "Done"
复制代码
PowerShell v3.0- -9..0 | ForEach{$url = 'http://open.iciba.com/dsapi/?date=' + (get-Date).AddDays($_).ToString('yyyy-MM-dd'); (Invoke-WebRequest $url).Content | ConvertFrom-Json | ForEach{$_.content; $_.note; $_.translation; $_.dateline}}
复制代码
作者: kaze 时间: 2019-3-11 12:41
回复 4# WHY
牛啊,POWERSHELL就一句话,还是JAVASCRIPT好懂
作者: kaze 时间: 2019-3-27 11:37
回复 2# zaqmlp
你好,请问 n=WSH.Arguments(0)是批处理输入JAVASCRIPT的内容,但是如何把解析的内容(指定一行例:mp3网址url_list)返回到批处理变量中呢?中间有用js显示多行内容:WSH.echo(num+'\r\n'+url_list+'\r\n'+list);
后面的想
set /p www=输入u打开网址
echo %www%|findstr "^u$">nul
怎么顺便打开网址。。。
作者: kaze 时间: 2019-3-29 12:16
回复 4# WHY
你好,请问方便解答一下吗?
n=WSH.Arguments(0)是批处理输入JAVASCRIPT的内容,但是如何把JS解析的内容(指定一行例:mp3网址url_list)返回到批处理变量中呢?中间有用js显示多行内容:WSH.echo(num+'\r\n'+url_list+'\r\n'+list);
后面的想
set /p www=输入u打开网址
echo %www%|findstr "^u$">nul
怎么顺便打开网址。。。
作者: kaze 时间: 2019-3-31 12:51
本帖最后由 kaze 于 2019-3-31 13:30 编辑
上面的问题还是没有解决呢,有没有人能帮忙看一看我这个小白啊??
作者: zaqmlp 时间: 2019-3-31 19:09
回复 6# kaze
没赞助没动力
作者: kaze 时间: 2019-3-31 20:31
没钱啊,穷人,哎,生活不易,都怪以前没好好学习。
作者: CrLf 时间: 2019-3-31 22:42
工具不少,可以试试
http://bcn.bathome.net/s/tool/index.html?key=json
作者: WHY 时间: 2019-4-1 19:25
回复 7# kaze
描述看不懂,猜测你是想要这样- @if(0)==(0) echo off
- for /f "delims=" %%i in ('cscript //nologo //e:jscript "%~f0" 30') do set "_%%i"
- set /p www=输入u打开网址
- if /i "%www%" == "u" start "" "%_b%"
- pause & exit /b
- @end
-
- var num = WSH.Arguments(0);
- var url_list = 'www.bathome.net';
- var list = 'MyList';
- WSH.Echo('a=' + num + '\nb=' + url_list + '\nc=' + list);
复制代码
作者: kaze 时间: 2019-4-2 12:54
回复 12# WHY
感谢回复,要点是不能影响其他字符显示ECHO,按照上面的修改,会显示大批 环境变量 _** 没有定义或者 a=没有显示,变量list是一个包含多个回车符的上一个函数的返回值。
感谢,不过也实现了打开网址的要求,谢谢
作者: kaze 时间: 2019-4-29 12:54
说到底 var obj = JSON.parse(data);等价于 var obj=eval('('+data+')');但是如何还原json对象成json字符串? JSON.stringify(obj)用不了,有人知道么?
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |