如今隨着互聯網的發展,很多系統以web爲平臺,基於JSON交換數據,來提供信息服務。本文通過介紹vbs腳本讀取中央氣象臺(http://www.nmc.cn/)提供的氣象數據,掌握wincc處理JSON數據的方法。
1.關於JSON
介紹
JSON(JavaScript Object Notation,JavaScript對象表示法)是一種輕量級的數據交換語言,用來傳輸由屬性值或者序列性的值組成的數據對象。JSON 數據格式與語言無關,源於JavaScript。但當前很多編程語言都支持 JSON 格式數據的生成和解析。JSON 的官方 MIME 類型是 application/json,文件擴展名是 .json,被IETF(Internet Engineering Task Force)定義爲RFC 4627標準。
語法規則
JSON 使用 JavaScript 語法來描述數據對象,其語法是 JavaScript 對象表示語法的子集:
-
數據在名稱/值(key/value)對中
-
數據由逗號分隔
-
大括號保存對象
-
中括號保存數組
如瀏覽器訪問http://www.nmc.cn/f/rest/real/58238,返回的JSON數據包含weather等多個對象,weather又包含temperature等多個 key/value(鍵/值)對。其中key 必須是字符串,value 可以是合法的 JSON 數據類型(字符串, 數字, 對象, 數組, 布爾值或 null)。
應用領域
WEB開發:
JSON最開始被廣泛的應用於WEB應用的開發。不過當前JSON使用在JavaScript、Java、Node.js應用的情況比較多,PHP、C#等開發的WEB應用主要還是使用XML。
NoSQL數據庫:
相對於傳統的關係型數據庫,一些基於文檔存儲的NoSQL非關係型數據庫選擇JSON作爲其數據存儲格式,比較出名的產品有:MongoDB、CouchDB、RavenDB等。
與XML
JSON與XML最大的不同在於XML是一個完整的標記語言,而JSON不是。這使得XML在程序判讀上需要比較多的功夫。主要的原因在於XML的設計理念與JSON不同。XML利用標記語言的特性提供了絕佳的延展性(如XPath),在數據存儲、擴展及高級檢索方面具備對JSON的優勢,而JSON則由於比XML更加小巧,以及瀏覽器的內建快速解析支持,使得其更適用於網絡數據傳輸領域。對於 AJAX 應用程序來說,JSON 比 XML 更快更易使用。
2.Vbs解析JSON
方法:vbs中調用Microsoft ScriptControl(msscript.ocx)com組件對象,通過ScriptControl接口利用js實現JSON解析。
msscript.ocx
Microsoft(R) Script 控件使用戶可以創建運行任何 ActiveX(R) scripting 腳本引擎,例如 Microsoft(R) Visual Basic (R) Scripting Edition 或Microsoft(R) JScript(TM) 的應用程序。用戶可以將任何 Automation 對象的對象模型添加到 Script 控件中,這樣該對象的方法和屬性就可以爲 scripting 引擎所使用。
ScriptControl接口
如下圖,ScriptControl接口包括了一系列方法、屬性及事件
一般使用方法:
1、在程序中加入ScriptControl
2、定義一個ScriptControl的實例
3、調用AddCode等方法向腳本引擎中加入要執行的腳本。
4、調用Run執行要執行的腳本函數。
vbs腳本
爲了方便腳本調用,可以把創建MSScriptControl.ScriptControl對象執行js做成一個函數
示例腳本:從中央氣象臺(http://www.nmc.cn/)讀取南京地區實時氣溫值
Sub OnLButtonDown(ByVal Item, ByVal Flags, ByVal x, ByVal y)
Dim objHttp
Dim URL
Dim scriptCtrl
Dim Request_JSON_Data
Dim objJSON
URL="http://www.nmc.cn/f/rest/real/58238"
Set objHttp = CreateObject("MSXML2.XMLHTTP.6.0")
On Error Resume Next
objHttp.open "GET",URL,False
If Err Then
HMIRuntime.Trace Err.Description & " [0x" & Hex(Err.Number) & "]" & vbCrLf
Err.Clear
End If
objHttp.setRequestHeader "Content-Type", "application/json"
objHttp.send
If Err Then
HMIRuntime.Trace Err.Description & " [0x" & Hex(Err.Number) & "]" & vbCrLf
Err.Clear
End If
Set objJSON = parseJSON (objHttp.responseText,scriptCtrl)
If Err Then
HMIRuntime.Trace Err.Description & " [0x" & Hex(Err.Number) & "]" & vbCrLf
HMIRuntime.Trace "............." & vbCrLf
Err.Clear
End If
HMIRuntime.Trace objJSON.weather.temperature & vbCrLf
If Err Then
HMIRuntime.Trace Err.Description & " [0x" & Hex(Err.Number) & "]" & vbCrLf
Err.Clear
End If
Set objHttp = Nothing
Set scriptCtrl = Nothing
End Sub
更多精彩內容,可關注本人微信公衆號scadaclub