批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程
[批处理文件精品]批处理版照片整理器[批处理文件精品]纯批处理备份&还原驱动在线第三方下载
返回列表 发帖

[文本处理] 【已解决】批处理BAT如何使用VBS(或者纯vbs)解析JSON

本帖最后由 kaze 于 2019-3-10 18:29 编辑

想要弄一个BAT如何使用VBS(或者纯vbs)解析JSON,因为JAVASCRIPT解析非常方便
var obj = JSON.parse(ds);
弄了一段代码,但是不知道为什么就是不成功,
要求不要已经发布的纯BAT代码,非常复杂,看不懂,基本不能通用。有没有人能够帮忙修改一下代码
  1. <!-- :
  2. @echo off
  3. echo 取金山词霸每日一句数据
  4. pause
  5. set www=
  6. set /p www=输入 "网址/" :http
  7. echo %www%
  8. echo;%www%|mshta "%~f0"
  9. exit /b
  10. -->
  11. <script>
  12. var fso = new ActiveXObject("Scripting.FileSystemObject");
  13. var StdIn = fso.GetStandardStream(0);
  14. var StdOut = fso.GetStandardStream(1);
  15. var url=StdIn.ReadLine();
  16. function Get(N) {var X = new ActiveXObject("Msxml2.XMLHTTP");
  17. X.open("GET", N, false);
  18. X.send("");
  19. return X.responseText;
  20. }
  21. var s1='1';
  22. var d={};
  23. for (var i = 0; i < 10; i++) {
  24. date = new Date();
  25. yd = +date - 86400000*i;
  26. d = new Date(yd);
  27. var yd= d.getFullYear()+"-"+(d.getMonth()+1)+"-"+d.getDate();
  28. url = "http://open.iciba.com/dsapi/?date="+yd;
  29. ds = Get(url);
  30. if (ds){
  31. //var obj = JSON.parse(ds);
  32. //var MottoEN=obj.content;
  33. //var MottoCN=obj.note;
  34. //var MottoCN2=obj.translation;
  35. //var MottoDate=obj.dateline;
  36. //var d[i]=yd+"\n"+MottoEN+"\n"+MottoCN+"\n"+MottoCN2+"\n";
  37. //alert('yd\nMottoEN\nMottoCN\nMottoCN2\n');
  38. var d[i]=ds;
  39. var data=d[i]+"\n";
  40. }
  41. }
  42. fso.CreateTextFile('X:\ciba.txt',2,true).Write(data);
  43. close();
  44. </script>
复制代码

  1. /*&cls
  2. @echo off
  3. title 代码可用,扫码头像,感谢赞助;有什么问题,可加QQ956535081及时沟通
  4. cd /d "%~dp0"
  5. cscript -nologo -e:jscript "%~f0" 30
  6. pause&exit /b
  7. */
  8. var fso=new ActiveXObject('Scripting.FileSystemObject');
  9. var http=new ActiveXObject('MSXML2.XMLHTTP');
  10. var today=new Date();
  11. var result='', n=WSH.Arguments(0);
  12. for(var i=0;i<Number(n);i++){
  13.     var day=new Date(today-86400000*i);
  14.     var tmpday=day.getFullYear()+"-"+(day.getMonth()+1)+"-"+day.getDate();
  15.     var daily=getinfo(gettext(tmpday));
  16.     result+=daily+'\r\n\r\n';
  17. }
  18. //WSH.echo(result);
  19. var f=fso.CreateTextFile('dailysentence.txt', 2, true);
  20. f.Write(result);
  21. f.Close();
  22. WSH.Quit();
  23. function gettext(d){
  24.     var url='http://open.iciba.com/dsapi/?date='+d;
  25.     var text='';
  26.     http.open('Get', url, false)
  27.     http.send();
  28.     text=http.responseText;
  29.     return text;
  30. }
  31. function getinfo(s){
  32.     var json=eval('('+s+')');
  33.     var content=json['content'];
  34.     var note=json['note'];
  35.     var translation=json['translation'];
  36.     var dateline=json['dateline'];
  37.     return content+'\r\n'+note+'\r\n'+translation;
  38. }
复制代码
1

评分人数

    • kaze: 解决问题了技术 + 1
提供代写,省时省力省事,支付宝扫码头像支付,QQ956535081

TOP

本帖最后由 kaze 于 2019-3-10 18:47 编辑

回复 2# zaqmlp


    谢谢,:victory: :) 很完美,关键一句话  var json=eval('('+s+')');    虽然不太懂,但是套用一下拉网站数据足够了,for循环怎么倒序呢?
搜了一下,for(var i=Number(n);i>=0;i--)完美解决,

TOP

vbs
  1. rem On Error Resume Next
  2. Dim http, html, strOut, i, dt, ymd, url
  3. Set http = CreateObject("Msxml2.XMLHTTP")
  4. Set html = CreateObject("htmlfile")
  5. strOut = ""
  6. For i = 0 To 9
  7.     dt  = DateAdd("d", -i, date)
  8.     ymd = Year(dt) & "-" & Right(Month(dt) + 100, 2) & "-" & Right(Day(dt) + 100, 2)
  9.     url = "http://open.iciba.com/dsapi/?date=" & ymd
  10.     http.open "GET", url, False
  11.     http.send
  12.     strOut = GetJSON(http.responseText) & vbCrLf & vbCrLf & strOut
  13. Next
  14. Function GetJSON(txt)
  15.     Dim window, json
  16.     Set window = html.parentWindow
  17.     window.execScript "var json = " & txt, "JScript"
  18.     Set json = window.json
  19.     GetJSON = json.content & vbCrLf & json.note & vbCrLf
  20.     GetJSON = GetJSON & json.translation & vbCrLf & json.dateline
  21. End Function
  22. Dim fso
  23. Set fso = CreateObject("Scripting.FileSystemObject")
  24. fso.CreateTextFile("ciba.Log", 2, True).Write(strOut)
  25. MsgBox "Done"
复制代码
PowerShell v3.0
  1. -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}}
复制代码
1

评分人数

TOP

回复 4# WHY


    牛啊,POWERSHELL就一句话,还是JAVASCRIPT好懂

TOP

返回列表