プロが教えるわが家の防犯対策術!

WSH(VBS)でJSONの文字列を読み込む方法を教えてください。

"Msxml2.XMLHTTP"をGETで読み込んでJSONが文字列になっています。

その文字列は連想配列になっていてどう読み込んだらよいのかわかりません。

ちなみに、
JavaScriptはAjaxで読み込んでそれなりに使えますが、
JScriptでなく、VBScriptから入った初心者です。

WSH(VBScript)で、JSON文字列を配列などにする方法やオブジェクトを教えてください。

A 回答 (1件)

こんばんは。



たぶん、Excelなら、それ向けの関数があるからできるのではないかと思います。
しかし、VBScript からですと、そうした関数も使えないし、JavaScript が簡単か簡単でないか、その内容にも依存しているからです。

  With CreateObject("ScriptControl")
   .Language = "JScript"
   .Addcode "function getDta {return eval('(' ......
   End With

これに、ぞれぞれのキーで検索するというわけです。
ネットでは、上記の方法で出ていますが、以下のような、簡単な構造の場合は、面倒でならないのです。ユーザー定義関数で切り分けて羅列しただけです。

'//
':住所を出す、Wscript コード
ZIPCode =InputBox ("郵便番号を入れてください。xxx-xxxx ")
''ZipCode = "101-0047"
izip =Split (ZipCode,"-")
If Len(izip(0)) <>3 or Len(izip(1))<>4 Then
MsgBox "郵便番号が正しくありません。例:101-0047",16
WScript.Quit
End If

strURL="http://api.thni.net/jzip/" & izip(0) &"/"& izip(1) &".json"
'MsgBox strURL
Set objHTTP =CreateObject("Msxml2.XMLHTTP")
''"WinHttp.WinHttpRequest.5.1
With objHTTP
.open "GET", strURL, False
.send
data = .responseText
rc = .status
End With
keys = Array("state", "stateName","city","street")
buf =JsonSolve(data, keys)
MsgBox Mid(buf,2)

Function JsonSolve(res, keys)
If InStr(1, res, "err") = 0 Then
buf = Mid(Trim(res), InStr(1,res,"{")+2)
buf = Left(buf, InStrRev(buf, "}")-1)
buf = Replace(buf, """", "")
For Each n In keys
buf = Replace(buf, n & ":", "")
Next
End If
JsonSolve = buf
End Function
    • good
    • 0
この回答へのお礼

回答ありがとうございました。

文字列の操作でやってみると、意外と簡単にできました。

教わったソースもとても使いやすそうで、コツが掴めそうです。

お礼日時:2018/12/23 01:45

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!