19

我有一个 ERP 系统的快速开发工具,它只允许使用 vbscript。我正在尝试使用 VBS 创建一个简单的 AJAX 请求。这适用于“Microsoft.XMLHTTP”-对象。

下一步是使用 json 从网络服务器接收数据。但在 VBS 中似乎没有像“json_decode”这样的功能。

有谁知道解决方案?还是开发自己的 json 函数的唯一选择?

4

5 回答 5

13

由于 JSON 是一种分层数据格式,因此正如 Peter 建议的那样,使用正则表达式和 Split() 不会让您走得太远。

如果您的环境允许,CreateObject()您可以使用用另一种语言编写的现成 COMponent(例如,将标准 json2.js 包装在 .WSC 中或 COM 启用 .NET DLL)。另一种选择是通过 Microsoft Script Control 使用另一种语言。这种方法的缺点是您必须处理由其他语言提供的对象/数组(在彼得提到的主题中可以找到一些提示)。

可以在此处找到纯 VBScript 解决方案。我无法阅读文档,但代码可以编译并“有效”用于简单的测试用例 - YMMV。

于 2012-08-28T09:15:02.030 回答
10

用 ASPJSON 做这个怎么样?
可从http://www.aspjson.com/

我将使用它作为一个非常旧的站点的解决方案,将带有编码数据的 ajax 调用(使用 Jquery)发送到 MongoDB,以进行测试。

于 2013-09-03T00:30:16.303 回答
4

我有一个类似的问题,所以我在 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
于 2012-08-29T06:10:36.163 回答
1

查看https://github.com/rcdmk/aspJSON

不确定这是否与 Logan 的回答中提到的 www.ASPJSON.com (现已不复存在)有任何关系。

于 2017-06-15T16:25:49.110 回答
0

您最好根据此处对 json 和 asp 的查询推出自己的。像这样一个 在经典 ASP 中解析 JSON 的任何好的库? 大多数时候使用 json2 库,但这是基于 jscript 的,所以你没有选择。大多数情况下,这种 JSON 具有固定的结构,因此使用正则表达式解析应该不那么困难,就像我在上面的几个答案中展示的那样。您可以发布一些 JSON,以便我们可以使用一些例程对其进行测试。

于 2012-08-28T08:22:24.557 回答