Есть ли анализатор JSON для VB6 / VBA? - PullRequest
38 голосов
/ 06 мая 2010

Я пытаюсь использовать веб-сервис в VB6. Служба, которой я управляю, в настоящее время может возвращать сообщение SOAP / XML или JSON. Мне действительно трудно понять, может ли тип SOB в VB6 (версия 1) обрабатывать возвращаемый object - в отличие от простых типов, таких как string, int и т. Д. сделать, чтобы заставить VB6 играть с возвращенными объектами.

Поэтому я подумал, что мог бы сериализовать ответ в веб-сервисе в виде строки JSON. Существует ли парсер JSON для VB6?

Ответы [ 14 ]

1 голос
/ 22 мая 2019

Поймите, это старый пост, но я недавно наткнулся на него, добавляя потребление веб-сервиса в старое приложение VB6. Принятый ответ (VB-JSON) все еще действителен и, кажется, работает. Однако я обнаружил, что Chilkat был обновлен и теперь включает функциональность REST и JSON, что делает его универсальным (хотя и платным) инструментом для меня. У них даже есть онлайн-генератор кода, который генерирует код для анализа вставленных данных JSON.

JsonObject link

Ссылка на генератор кода

0 голосов
/ 22 ноября 2017

это пример кода vb6, проверено, все сделано

из приведенных выше хороших примеров, я внес изменения и получил этот хороший результат

он может читать ключи {} и массивы []

Option Explicit
'in vb6 click "Tools"->"References" then
'check the box "Microsoft Script Control 1.0";
Dim oScriptEngine As New ScriptControl
Dim objJSON As Object

''to use it
Private Sub Command1_Click()
  MsgBox JsonGet("key1", "{'key1': 'value1'  ,'key2': { 'key3': 'value3' } }")''returns "value1"
  MsgBox JsonGet("key2.key3", "{'key1': 'value1'  ,'key2': { 'key3': 'value3' } }") ''returns "value3"
  MsgBox JsonGet("result.0.Ask", "{'result':[{'MarketName':'BTC-1ST','Bid':0.00004718,'Ask':0.00004799},{'MarketName':'BTC-2GIVE','Bid':0.00000073,'Ask':0.00000074}]}") ''returns "0.00004799"
  MsgBox JsonGet("mykey2.keyinternal1", "{mykey:1111, mykey2:{keyinternal1:22.1,keyinternal2:22.2}, mykey3:3333}") ''returns "22.1"
End Sub

Public Function JsonGet(eKey$, eJsonString$, Optional eDlim$ = ".") As String
  Dim tmp$()
  Static sJsonString$
  If Trim(eKey$) = "" Or Trim(eJsonString$) = "" Then Exit Function
  If sJsonString <> eJsonString Then
    sJsonString = eJsonString
    oScriptEngine.Language = "JScript"
    Set objJSON = oScriptEngine.Eval("(" + eJsonString + ")")
  End If
  tmp = Split(eKey, eDlim)
  If UBound(tmp) = 0 Then JsonGet = VBA.CallByName(objJSON, eKey, VbGet): Exit Function

  Dim i&, o As Object
  Set o = objJSON
  For i = 0 To UBound(tmp) - 1
    Set o = VBA.CallByName(o, tmp(i), VbGet)
  Next i
  JsonGet = VBA.CallByName(o, tmp(i), VbGet)
  Set o = Nothing
End Function

Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
  Set objJSON = Nothing
End Sub
0 голосов
/ 29 августа 2016

Формула в клетке EXCEL

=JSON2("{mykey:1111, mykey2:{keyinternal1:22.1,keyinternal2:22.2}, mykey3:3333}", "mykey2", "keyinternal2")

ДИСПЛЕИ: 22,2

=JSON("{mykey:1111,mykey2:2222,mykey3:3333}", "mykey2")

ДИСПЛЕИ: 2222

  • ИНСТРУКЦИИ:
  • Step1,нажмите ALT + F11
  • Step2.Вставить -> Модуль
  • Шаг 3.инструменты -> ссылки -> отметьте Microsoft Script Control 1.0
  • Step4.вставьте это ниже.
  • Шаг 5.ALT + Q закрыть окно VBA.

Инструменты -> Ссылки -> Microsoft Script Control 1.0;{0E59F1D2-1FBE-11D0-8FF2-00A0D10038BC};C: \ Windows \ SysWOW64 \ msscript.ocx

Public Function JSON(sJsonString As String, Key As String) As String
On Error GoTo err_handler

    Dim oScriptEngine As ScriptControl
    Set oScriptEngine = New ScriptControl
    oScriptEngine.Language = "JScript"

    Dim objJSON As Object
    Set objJSON = oScriptEngine.Eval("(" + sJsonString + ")")

    JSON = VBA.CallByName(objJSON, Key, VbGet)

Err_Exit:
    Exit Function

err_handler:
    JSON = "Error: " & Err.Description
    Resume Err_Exit

End Function


Public Function JSON2(sJsonString As String, Key1 As String, Key2 As String) As String
On Error GoTo err_handler

    Dim oScriptEngine As ScriptControl
    Set oScriptEngine = New ScriptControl
    oScriptEngine.Language = "JScript"

    Dim objJSON As Object
    Set objJSON = oScriptEngine.Eval("(" + sJsonString + ")")

    JSON2 = VBA.CallByName(VBA.CallByName(objJSON, Key1, VbGet), Key2, VbGet)

Err_Exit:
    Exit Function

err_handler:
    JSON2 = "Error: " & Err.Description
    Resume Err_Exit

End Function
0 голосов
/ 13 ноября 2014

Используя функции JavaScript для синтаксического анализа JSON, поверх ScriptControl, мы можем создать синтаксический анализатор в VBA, который будет перечислять каждую точку данных внутри JSON. Независимо от того, насколько вложенной или сложной является структура данных, пока мы предоставляем допустимый JSON, этот синтаксический анализатор будет возвращать полную древовидную структуру.

Методы JavaScript Eval, getKeys и getProperty предоставляют строительные блоки для проверки и чтения JSON.

В сочетании с рекурсивной функцией в VBA мы можем перебирать все ключи (до n-го уровня) в строке JSON. Затем, используя элемент управления Tree (используемый в этой статье), словарь или даже простую рабочую таблицу, мы можем упорядочить данные JSON по мере необходимости.

Полный код VBA здесь. Используя JavaScript-функции синтаксического анализа JSON, помимо ScriptControl, мы можем создать синтаксический анализатор в VBA, который будет перечислять каждую точку данных внутри JSON. Независимо от того, насколько вложенной или сложной является структура данных, пока мы предоставляем правильный JSON, этот синтаксический анализатор будет возвращать полную древовидную структуру.

Методы JavaScript Eval, getKeys и getProperty предоставляют строительные блоки для проверки и чтения JSON.

В сочетании с рекурсивной функцией в VBA мы можем перебирать все ключи (до n-го уровня) в строке JSON. Затем, используя элемент управления Tree (используемый в этой статье), словарь или даже простую рабочую таблицу, мы можем упорядочить данные JSON по мере необходимости.

Полный код VBA здесь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...