2012-08-28 5 views
12

vbscript 만 허용하는 ERP 시스템을위한 신속한 개발 도구가 있습니다. VBS를 사용하여 간단한 AJAX-Request를 생성하려고합니다. 그건 "Microsoft.XMLHTTP"- 개체와 함께 일했다.VBScript로 JSON 디코드/인코딩

다음 단계는 json을 사용하여 웹 서버에서 데이터를받는 것입니다. 하지만 VBS에서는 "json_decode"같은 기능이없는 것 같습니다.

해결책을 아는 사람이 있습니까? 아니면 내 자신의 json 함수를 개발할 수있는 유일한 옵션입니까?

+0

내 작업에서 작동하는 것 같습니다. [demon.tw] (http://demon.tw/my-work/vbs-json.html#code) –

답변

8

JSON은 계층 적 데이터 형식이므로 정규식과 Split()을 사용하여 Peter가 제안한대로 멀리하지 않습니다.

사용자 환경이 CreateObject() 인 경우 다른 언어로 작성된 준비된 COMponent를 사용할 수 있습니다 (예 : .WSC의 표준 json2.js를 랩핑하거나 COM DLL을 사용하여 .NET DLL 사용 가능). 또 다른 옵션은 Microsoft Script Control을 통해 다른 언어를 활용하는 것입니다. 이 접근 방식의 단점은 다른 언어에서 제공되는 객체/배열을 처리해야한다는 것입니다 (힌트는 Peter가 언급 한 주제에서 찾을 수 있습니다).

순수한 VBScript 솔루션은 here입니다. 설명서를 읽을 수는 없지만 간단한 테스트 케이스 인 YMMV의 경우 코드가 컴파일되고 '작동합니다'.

+0

demon.tw의 해결책은 훌륭합니다. 성능은 매우 느립니다. 10-15 개의 간단한 값을 가진 간단한 "배열"이 있습니다. 하나의 단일 배열에는 하나의 제품 정보가 들어 있습니다. 3500 개의 제품이 있으므로 JSON 인코딩 3500 배를 실행해야합니다. 이 작업의 경우 2-3 분의 작업을 수행합니다. JSON 인코딩을 사용하지 않으면 빠른 속도로 실행되지만이 JSON 형식이 필요합니다. 속도를 낼 가능성이 있습니까? 30 초가 허용됩니다. –

+0

JSON 구문을 수동으로 작성하여이 문제를 해결했습니다. 방금 문자열 자체에 가입하고 JSON-Syntax로 감싸고 특수 문자를 이스케이프 처리했습니다. 따라서 성능이 뛰어납니다. 제 경우에는 효과가 있습니다. –

+0

예 : 표준 JSON2.js를 .WSC 또는 COM 사용 가능으로 랩핑하십시오.NET DLL_ 웹 사이트 나 다른 방법을 알려주시겠습니까? – Gurman

0

json 및 asp의 쿼리를 기반으로 자신의 롤아웃을 수행하는 것이 좋습니다. 예를 들면 이것 1 개 Any good libraries for parsing JSON in Classic ASP? json2 라이브러리가 대부분 사용되지만 이것은 jscript에 기반하므로 사용자를위한 옵션이 없습니다. 또한 JSON의 이런 종류의 구조는 고정되어 있으므로 위와 같은 몇 가지 대답에서 설명한 것처럼 Regularexpressression을 구문 분석하는 것이 그렇게 어렵지 않아야합니다. 일부 JSON을 게시하여 일부 루틴으로 테스트 할 수 있습니다.

3

비슷한 문제가있어서 프로젝트 중 하나의 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를로 인코딩 된 데이터와 아약스 호출 (jQuery를 사용하여) 보내는 아주 오래된 사이트에 대한 솔루션으로 이것을 사용하려고 해요.

+1

이것은 최상의 솔루션이며 작업 창살과 성능이 좋습니다. –

관련 문제