代码之家  ›  专栏  ›  技术社区  ›  Codename K

如何使用VBScript或批处理文件从JSON文件下载和获取值?

  •  -1
  • Codename K  · 技术社区  · 7 年前

    这是应答的VBScript代码 here 从计算机获取具有正确值的JSON文件。

    Set fso = CreateObject("Scripting.FileSystemObject")
    
    json = fso.OpenTextFile("C:\path\to\combined.json").ReadAll
    
    Set re = New RegExp
    re.Pattern = """passed"":(true|false),"
    re.IgnoreCase = True
    
    For Each m In re.Execute(json)
      passed = CBool(m.SubMatches(0))
    Next
    

    但是我有一个json文件,看起来像是在线的,

    ["AA-BB-CC-MAKE-SAME.json","SS-ED-SIXSIX-TENSE.json","FF-EE-EE-EE-WW.json","ZS-WE-AS-FOUR-MINE.json","DD-RF-LATERS-LATER.json","FG-ER-DC-ED-FG.json"]
    

    如何下载此JSON文件并使用VBScript或批处理文件将值获取到五个变量?

    1 回复  |  直到 7 年前
        1
  •  1
  •   Hackoo    7 年前

    下面是一个从Internet下载并解析JSON的示例:

    Dim http,URL
    URL = "http://ip-api.com/json/"
    Set http = CreateObject("Msxml2.XMLHTTP")
    http.open "GET",URL,False
    http.send
    strJson = http.responseText
    
    Set j = ParseJson(strJson)
    Result = "IP =" & j.query & vbCrlf &_
    "ISP = "& j.isp & vbCrlf &_
    "Country = "& j.country & vbCrlf &_
    "TimeZone = "& j.timezone
    
    Wscript.echo Result
    '--------------------------------------------------------
    Function ParseJson(strJson)
        Set html = CreateObject("htmlfile")
        Set window = html.parentWindow
        window.execScript "var json = " & strJson, "JScript"
        Set ParseJson = window.json
    End Function
    '--------------------------------------------------------
    

    您可以尝试以下代码:

    Dim http,URL
    URL = "https://privateURL/jsonfile/"
    Set http = CreateObject("Msxml2.XMLHTTP")
    http.open "GET",URL,False
    http.send
    strJson = http.responseText
    Result = Extract(strJson,"(\x22(.*)\x22)")
    Arr = Split(Result,",")
    For each Item in Arr
        wscript.echo Item
    Next
    '******************************************
    Function Extract(Data,Pattern)
       Dim oRE,oMatches,Match,Line
       set oRE = New RegExp
       oRE.IgnoreCase = True
       oRE.Global = True
       oRE.Pattern = Pattern
       set oMatches = oRE.Execute(Data)
       If not isEmpty(oMatches) then
           For Each Match in oMatches  
               Line = Line & Trim(Match.Value) & vbCrlf
           Next
           Extract = Line
       End if
    End Function
    '******************************************