Подтвердить что ты не робот

Декодировать/кодировать JSON с помощью VBScript

У меня есть инструмент быстрой разработки для ERP-системы, которая позволяет использовать только vbscript. Я пытаюсь создать простой AJAX-запрос с VBS. Это сработало с объектом "Microsoft.XMLHTTP".

Следующим шагом будет получение данных с веб-сервера с помощью json. Но в VBS, похоже, нет функции типа "json_decode" или другого.

Кто-нибудь знает решение? Или это единственный вариант для разработки моей собственной json-функции?

4b9b3361

Ответ 1

Поскольку JSON является иерархическим форматом данных, используя регулярные выражения и Split(), как предложил Питер, далеко не удастся.

Если ваша среда позволяет CreateObject(), вы можете использовать готовый COM-компонент, написанный на другом языке (например, оберните стандартный json2.js в .WSC или COM, включите .NET DLL). Другой вариант - использовать другой язык с помощью Microsoft Script Control. Кон этим подходом является то, что вам придется иметь дело с объектами/массивами, предоставленными другим языком (некоторые намеки можно найти в теме, на которую ссылается Peter).

Чистое решение VBScript можно найти здесь. Я не могу прочитать документацию, но код компилируется и "работает" для простых тестовых случаев - YMMV.

Ответ 2

Как это сделать с ASPJSON?
Доступно из http://www.aspjson.com/

Я собираюсь использовать это как решение для очень старого сайта для отправки вызова ajax (используя JQuery) с закодированными данными в MongoDB для тестирования.

Ответ 3

У меня была аналогичная проблема, поэтому я написал функцию JSONtoXML в VBScript для одного из моих проектов. Никаких гарантий на этот script (он предоставлен как есть и имеет известные ограничения, например, не обрабатывать все типы управляющих последовательностей):

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

Ответ 4

Вам лучше развернуть свои собственные, основываясь на запросе здесь на json и asp. Как, например, эта Любые хорошие библиотеки для разбора JSON в классическом ASP? В большинстве случаев используется библиотека json2, но она основана на jscript, поэтому для вас нет выбора. Также большую часть времени этот вид JSON имеет фиксированную структуру, поэтому не должно быть так сложно разобрать Regularexpression, как я продемонстрировал в нескольких ответах, подобных приведенному выше. Вы можете опубликовать часть своего JSON, чтобы мы могли протестировать его с помощью некоторых подпрограмм.

Ответ 5

Отъезд https://github.com/rcdmk/aspJSON

Не уверен, что это имеет какое-либо отношение к www.ASPJSON.com(ныне несуществующий), упомянутый в ответе Logan.