あなたのJSONはこのようになります。スペース名を削除するために変数名を変更したことに注意してください。これらの推測が間違っていれば、コードを修正する必要があります。 JSON変数名では、数値以外の値は引用符で囲まれています。通常、これを処理するにはJSONパーサーを使用しますが、実際にこの単純な場合は、単純な文字列処理コードを使用して処理を進めることができます。
サービスから取得したJSON文字列をこの関数に渡します。これは、JSON文字列が文字列であることに基づいて動作し、シンプルな形式であれば使用可能な値を得るために切り詰めることができます。より複雑なメッセージになったら、VB用のJSONパーサーを検索する必要があります。あるいは、インターフェイスがXMLで応答できる場合は、VBで処理する方がはるかに簡単です。
これはVB6コードです(テストするのが簡単です)。VBスクリプトを宣言する変数から 'as string'、 'as as integer'などをすべて削除する必要があります。私はhereからのVBScriptのval()関数を含んでいますが、私の関数でテストしていません。 JSONは文字列形式であるため、val()が必要です。数値を文字列と比較しようとすると、予期しない結果が発生します。
'
' Function to return RED or GREEN depending on values in simple JSON
'
Function checkStatus(sJSON As String) As String
Dim aVals() As String, aParams() As String, i As Integer, sName As String, sVal As String
Dim bDatabase As Boolean, bCPU As Boolean, bConnection As Boolean, bMemory As Boolean
aVals = Split(sJSON, ",")
For i = 0 To UBound(aVals)
aVals(i) = Trim(aVals(i)) ' remove any leading & trailing spaces
aVals(i) = Replace(aVals(i), "{", "") ' remove braces open
aVals(i) = Replace(aVals(i), "}", "") ' remove braces close
aVals(i) = Replace(aVals(i), """", "") ' remove quotes > "database: true"
Debug.Print "vals[" & i & "]=" & aVals(i)
If Len(aVals(i)) > 0 Then ' should catch any dodgy JSON formatting but may need refinement
aParams = Split(aVals(i), ":") ' split the line e.g. "database: true" > "database" and " true"
If UBound(aParams) > 0 Then
sName = LCase(Trim(aParams(0))) ' now we have sName = "database"
sVal = LCase(Trim(aParams(1))) ' and sVal = "true"
Select Case sName
Case "database"
bDatabase = False
If sVal = "true" Then
bDatabase = True
End If
Case "cpu_usage"
bCPU = False
If Val(sVal) > 80 Then
bCPU = True
End If
Case "connection_response"
bConnection = False
If Val(sVal) > 0 Then
bConnection = True
End If
Case "memory"
bMemory = False
If Val(sVal) < 80 Then
bMemory = True
End If
End Select
End If
End If
Next i
checkStatus = "RED" ' default return value to indicate an issue
' compare the flags to decide if all is well.
If bDatabase And bCPU Then 'And bConnection And bMemory Then
checkStatus = "GREEN"
End If
End Function
Function Val(myString)
' Val Function for VBScript (aka ParseInt Function in VBScript).
' By Denis St-Pierre.
' Natively VBScript has no function to extract numbers from a string.
' Based shamelessly on MS' Helpfile example on RegExp object.
' CAVEAT: Returns only the *last* match found
' (or, with objRE.Global = False, only the *first* match)
Dim colMatches, objMatch, objRE, strPattern
' Default if no numbers are found
Val = 0
strPattern = "[-+0-9]+" ' Numbers positive and negative; use
' "ˆ[-+0-9]+" to emulate Rexx' Value()
' function, which returns 0 unless the
' string starts with a number or sign.
Set objRE = New RegExp ' Create regular expression object.
objRE.Pattern = strPattern ' Set pattern.
objRE.IgnoreCase = True ' Set case insensitivity.
objRE.Global = True ' Set global applicability:
' True => return last match only,
' False => return first match only.
Set colMatches = objRE.Execute(myString) ' Execute search.
For Each objMatch In colMatches ' Iterate Matches collection.
Val = objMatch.Value
Next
Set objRE= Nothing
End Function
JSONの形式が正しくありません。プロパティ名は "プロパティ値"である必要があります。セミコロン*( ';')*はJavaScriptのコマンド終了文字です。代わりにコロン*( ':')*を使用する必要があります。 – Lankymart
ありがとうLankymart - これは私がwebserviceから受け取っていると提案された応答だったので、私はWebサービスから出てくると思った何かを書きました。 Webサービス自体はまだ構築されていません。しかし、私はそれを監視する方法を見つけることを試みていた。 –
申し訳ありませんが、私はそれを取得しませんでした - * "私はjsonの応答を返すWebサービスがあります" *。現時点で純粋に概念的なものであれば、質問が明確な問題を抱え、助けようとしている人のために[mcve]を介して簡単に再作成できるので、これは正しい場所ではありません。投稿する前に[ask]を確認してください。 – Lankymart