2012-08-28 36 views
12

私はERPシステムのための迅速な開発ツールを持っています。これはvbscriptだけです。私はVBSで簡単なAJAX-Requestを作成しようとしています。これは "Microsoft.XMLHTTP"オブジェクトで機能しました。JSONとVBScriptのデコード/エンコード

次のステップは、jsonを使用してWebサーバーからデータを受信することです。しかし、VBSでは "json_decode"やその他のような機能はないようです。

ソリューションを知っている人はいますか?または、私自身のjson関数を開発する唯一のオプションですか?

+0

これは私の場合に動作するようです: [demon.tw](http://demon.tw/my-work/vbs-json.html#code) –

答えて

8

JSONは、Peterが提案しているように、正規表現とSplit()を使用して、階層データ形式であるため、遠くには届きません。

CreateObject()の環境では、別の言語で書かれた既成のCOMコンポーネントを使用できます(例:.WSCの標準json2.jsをラップするか、.NET DLLを有効にする)。もう1つの選択肢は、Microsoft Script Controlを介して別の言語を利用することです。このアプローチの欠点は、他の言語で提供されているオブジェクト/配列を扱わなければならないことです(いくつかのヒントはPeterが参照しているトピックにあります)。

純粋なVBScript溶液はhereです。私はドキュメントを読むことができませんが、コードはコンパイルされ、簡単なテストケースのために「動作します」 - YMMV。

+0

demon.twからの解決策は素晴らしい作品ですパフォーマンスは非常に遅いです。私は10-15の単純な値を持つ単純な "配列"を持っています。 1つのアレイには、1つの製品の情報が含まれています。私は3500製品を持っているので、私はJSONエンコーディング3500倍を実行する必要があります。 このタスクでは、2〜3分です。 JSONエンコーディングがなければ速く動作しますが、このJSON形式が必要です。それをスピードアップする可能性はありますか? 30秒は許容されます。 –

+0

私はJSON構文を手動で構築することでこの問題を解決しました。私はちょうどその文字列自体に参加し、JSON-Syntaxでそれらをラップし、いくつかの特殊文字をエスケープしました。パフォーマンスは素晴らしく、私の場合はうまくいきます。 –

+0

_e.g。標準のjson2.jsを.WSCまたはCOMで有効にします。NET DLL_あなたはどのようにそれを行うにはウェブサイトや任意のドキュメントを教えてくださいできますか? – Gurman

0

ここで、jsonとaspのクエリに基づいて自分自身を展開する方がよいでしょう。これと同じようにAny good libraries for parsing JSON in Classic ASP? ほとんどの場合、json2ライブラリが使用されていますが、これはjscriptに基づいており、オプションはありません。 また、ほとんどの場合、JSONのこの種の構造は固定されているので、上記のようないくつかの答えで示されているようにRegularexpressと解析するのは難しいはずはありません。 いくつかのJSONを公開して、いくつかのルーチンでテストすることができます。

3

私は同様の問題を抱えていたので、自分のプロジェクトの1つとしてVBScriptにJSONtoXML関数を書きました。このスクリプトには何の保証は(そのようなエスケープシーケンスのすべてのタイプを処理していないようであるとして、設けられていないだと限界が知られている):

Const stateRoot = 0 
Const stateNameQuoted = 1 
Const stateNameFinished = 2 
Const stateValue = 3 
Const stateValueQuoted = 4 
Const stateValueQuotedEscaped = 5 
Const stateValueUnquoted = 6 
Const stateValueUnquotedEscaped = 7 

Function JSONToXML(json) 
    Dim dom, xmlElem, i, ch, state, name, value 
    Set dom = CreateObject("Microsoft.XMLDOM") 
    state = stateRoot 
    For i = 1 to Len(json) 
    ch = Mid(json, i, 1) 
    Select Case state 
    Case stateRoot 
     Select Case ch 
     Case "[" 
     If dom.documentElement is Nothing Then 
      Set xmlElem = dom.CreateElement("ARRAY") 
      Set dom.documentElement = xmlElem 
     Else 
      Set xmlElem = XMLCreateChild(xmlElem, "ARRAY") 
     End If 
     Case "{" 
     If dom.documentElement is Nothing Then 
      Set xmlElem = dom.CreateElement("OBJECT") 
      Set dom.documentElement = xmlElem 
     Else 
      Set xmlElem = XMLCreateChild(xmlElem, "OBJECT") 
     End If 
     Case """" 
     state = stateNameQuoted 
     name = "" 
     Case "}" 
     Set xmlElem = xmlElem.parentNode 
     Case "]" 
     Set xmlElem = xmlElem.parentNode 
     End Select 
    Case stateNameQuoted 
     Select Case ch 
     Case """" 
     state = stateNameFinished 
     Case Else 
     name = name + ch 
     End Select 
    Case stateNameFinished 
     Select Case ch 
     Case ":" 
     value = "" 
     State = stateValue 
     End Select 
    Case stateValue 
     Select Case ch 
     Case """" 
     State = stateValueQuoted 
     Case "{" 
     Set xmlElem = XMLCreateChild(xmlElem, "OBJECT") 
     State = stateRoot 
     Case "[" 
     Set xmlElem = XMLCreateChild(xmlElem, "ARRAY") 
     State = stateRoot 
     Case " " 
     Case Chr(9) 
     Case vbCr 
     Case vbLF 
     Case Else 
     value = ch 
     State = stateValueUnquoted 
     End Select 
    Case stateValueQuoted 
     Select Case ch 
     Case """" 
     xmlElem.setAttribute name, value 
     state = stateRoot 
     Case "\" 
     state = stateValueQuotedEscaped 
     Case Else 
     value = value + ch 
     End Select 
    Case stateValueQuotedEscaped ' @@TODO: Handle escape sequences 
     value = value + ch 
     state = stateValueQuoted 
    Case stateValueUnquoted 
     Select Case ch 
     Case "}" 
     xmlElem.setAttribute name, value 
     Set xmlElem = xmlElem.parentNode 
     state = stateRoot 
     Case "]" 
     xmlElem.setAttribute name, value 
     Set xmlElem = xmlElem.parentNode 
     state = stateRoot 
     Case "," 
     xmlElem.setAttribute name, value 
     state = stateRoot 
     Case "\" 
     state = stateValueUnquotedEscaped 
     Case Else 
     value = value + ch 
     End Select 
    Case stateValueUnquotedEscaped ' @@TODO: Handle escape sequences 
     value = value + ch 
     state = stateValueUnquoted 
    End Select 
    Next 
    Set JSONToXML = dom 
End Function 

Function XMLCreateChild(xmlParent, tagName) 
    Dim xmlChild 
    If xmlParent is Nothing Then 
    Set XMLCreateChild = Nothing 
    Exit Function 
    End If 
    If xmlParent.ownerDocument is Nothing Then 
    Set XMLCreateChild = Nothing 
    Exit Function 
    End If 
    Set xmlChild = xmlParent.ownerDocument.createElement(tagName) 
    xmlParent.appendChild xmlChild 
    Set XMLCreateChild = xmlChild 
End Function 
+0

偉大な機能スティーブンに感謝します。あなたのアイデアを適応させたプロジェクトを以下で見直してください。 https://github.com/pravynandas/JSONToXML – PravyNandas

8

方法ASPJSONでこれをやってはどうですか? http://www.aspjson.com/

から入手可能
私はテストのために、MongoDBのに符号化されたデータでAJAX呼び出しを(jqueryのを使用して)送信するために非常に古いサイトのためのソリューションとしてこれを使用しようと思います。

+1

これは最適なソリューションであり、作業格子と性能は良好です。 –

0

チェックアウトhttps://github.com/rcdmk/aspJSON

これはローガンの答えで述べたwww.ASPJSON.comとは関係(今は亡き)を持っていればわかりません。