2016-12-14 16 views
-1

を使用して、しきい値に対してウェブサービス(JSONレスポンス)で返さ:は、私は次のようにJSONレスポンスを返すWebサービスを持っているVBScriptの

"database" ; True 
"cpu usage" ; 30% 
"connection response" ; 1 
"memory" ; 48% 

要件は、VBスクリプトを作成することです結果を読み取って設定されたしきい値と比較し、それに応じてフラグを設定します。 つまり、「データベース」に対する値が「真」で、CPU使用率が80%未満で、接続応答が0より大きく、メモリ使用量が80%未満であれば、「緑色」と言う結果が必要です。

誰かが上記のご要望にお手伝いしますか?これは、実際にはSCOM監視で使用されます。

+0

JSONの形式が正しくありません。プロパティ名は "プロパティ値"である必要があります。セミコロン*( ';')*はJavaScriptのコマンド終了文字です。代わりにコロン*( ':')*を使用する必要があります。 – Lankymart

+0

ありがとうLankymart - これは私がwebserviceから受け取っていると提案された応答だったので、私はWebサービスから出てくると思った何かを書きました。 Webサービス自体はまだ構築されていません。しかし、私はそれを監視する方法を見つけることを試みていた。 –

+0

申し訳ありませんが、私はそれを取得しませんでした - * "私はjsonの応答を返すWebサービスがあります" *。現時点で純粋に概念的なものであれば、質問が明確な問題を抱え、助けようとしている人のために[mcve]を介して簡単に再作成できるので、これは正しい場所ではありません。投稿する前に[ask]を確認してください。 – Lankymart

答えて

-1

あなたの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 
+0

してください! ** 1。**不完全な質問/トピック以外の質問への回答を投稿するのではなく、もっと多くのものを推奨する*(良いガイドは問題解決のためのOPの努力を示している)*。 ** 2。**別の言語のソースコードの例*(そして、VBはVBScriptとは異なります)*それはそのままでは分かりにくいです。 – Lankymart

+0

もっと包括的であると思うなら、あなたが言うことを考えます。その理由の半分は、その答えが彼のJSONの例について、そして彼の英語のために不正確になっていて、炎に反応していると書いていました。私は、ここに歓迎があることを彼に示したいと思っていましたが、彼に道を与え、彼自身のために解決するいくつかの問題を残しました。 –

+0

彼らはウェブサービスを持っていたとは言いませんでしたが、後で言いました。間違った前提をしている、私が言及した理由は、トピックとトピック以外の質問との違いであるからだ。彼らに表示するコードがなく、すべてが概念的なものであれば、少なくとも何かを試みてから、特定の問題が発生したときに戻ってくる必要があります。 – Lankymart

関連する問題