Есть ли парсер JSON для VB6 / VBA?

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

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


person Ben McCormack    schedule 06.05.2010    source источник
comment
У меня есть ответ ниже, но теперь я нашел лучший метод exceldevelopmentplatform.blogspot.com/2018/01/   -  person S Meaden    schedule 27.01.2018


Ответы (14)


Ознакомьтесь с JSON.org для получения актуального списка (см. Нижнюю часть главной страницы) парсеров JSON на многих разных языках. . На момент написания этой статьи вы увидите ссылку на несколько разных парсеров JSON, но только один предназначен для VB6 / VBA (остальные - .NET):

  • VB-JSON

    • When I tried to download the zip file, Windows said the data was corrupt. However, I was able to use 7-zip to pull the files out. It turns out that the main "folder" in the zip file isn't recognized as a folder by Windows, by 7-zip can see the contents of that main "folder," so you can open that up and then extract the files accordingly.
    • Фактический синтаксис этой библиотеки VB JSON действительно прост:

      Dim p As Object
      Set p = JSON.parse(strFormattedJSON)
      
      'Print the text of a nested property '
      Debug.Print p.Item("AddressClassification").Item("Description")
      
      'Print the text of a property within an array '
      Debug.Print p.Item("Candidates")(4).Item("ZipCode")
      
    • Примечание. Мне пришлось добавить библиотеки «Microsoft Scripting Runtime» и «Microsoft ActiveX Data Objects 2.8» в качестве ссылок через Инструменты> Ссылки в редакторе VBA.
    • Примечание. Код VBJSON фактически основан на проекте кода Google vba-json. Однако VBJSON обещает несколько исправлений ошибок по сравнению с исходной версией.
person Ben McCormack    schedule 06.05.2010
comment
есть ли способ с помощью VB-JSON передать ему объект класса и вернуть соответствующую строку JSON? Спасибо! - person Brian Behm; 03.01.2012
comment
Как вы проходите через объекты? Скажем, p.Item (AddressClassification) содержит 3 элемента. Как я могу перебрать элементы? - person Anon21; 30.01.2012
comment
@ AlexandreH.Tremblay У вас должна быть возможность перебирать элемент так же, как если бы вы перебирали любой массив в VB6 / VBA - person Ben McCormack; 30.01.2012
comment
@BenMcCormack Можете ли вы взглянуть на это, пожалуйста, stackoverflow.com/questions/26229563/? - person Koray Tugay; 07.10.2014

Основываясь на решении ozmike, которое у меня не сработало (Excel 2013 и IE10). Причина в том, что я не мог вызвать методы для открытого объекта JSON. Таким образом, его методы теперь доступны через функции, прикрепленные к DOMElement. Не знал, что это возможно (должно быть, эта штука с IDispatch), спасибо, ozmike.

Как заявил ozmike, никаких сторонних библиотек, только 30 строк кода.

Option Explicit

Public JSON As Object
Private ie As Object

Public Sub initJson()
    Dim html As String

    html = "<!DOCTYPE html><head><script>" & _
    "Object.prototype.getItem=function( key ) { return this[key] }; " & _
    "Object.prototype.setItem=function( key, value ) { this[key]=value }; " & _
    "Object.prototype.getKeys=function( dummy ) { keys=[]; for (var key in this) if (typeof(this[key]) !== 'function') keys.push(key); return keys; }; " & _
    "window.onload = function() { " & _
    "document.body.parse = function(json) { return JSON.parse(json); }; " & _
    "document.body.stringify = function(obj, space) { return JSON.stringify(obj, null, space); }" & _
    "}" & _
    "</script></head><html><body id='JSONElem'></body></html>"

    Set ie = CreateObject("InternetExplorer.Application")
    With ie
        .navigate "about:blank"
        Do While .Busy: DoEvents: Loop
        Do While .readyState <> 4: DoEvents: Loop
        .Visible = False
        .document.Write html
        .document.Close
    End With

    ' This is the body element, we call it JSON:)
    Set JSON = ie.document.getElementById("JSONElem")

End Sub

Public Function closeJSON()
    ie.Quit
End Function

Следующий тест создает объект JavaScript с нуля, а затем преобразует его в строки. Затем он анализирует объект и перебирает его ключи.

Sub testJson()
    Call initJson

    Dim jsObj As Object
    Dim jsArray As Object

    Debug.Print "Construction JS object ..."
    Set jsObj = JSON.Parse("{}")
    Call jsObj.setItem("a", 1)
    Set jsArray = JSON.Parse("[]")
    Call jsArray.setItem(0, 13)
    Call jsArray.setItem(1, Math.Sqr(2))
    Call jsArray.setItem(2, 15)
    Call jsObj.setItem("b", jsArray)

    Debug.Print "Object: " & JSON.stringify(jsObj, 4)

    Debug.Print "Parsing JS object ..."
    Set jsObj = JSON.Parse("{""a"":1,""b"":[13,1.4142135623730951,15]}")

    Debug.Print "a: " & jsObj.getItem("a")
    Set jsArray = jsObj.getItem("b")
    Debug.Print "Length of b: " & jsArray.getItem("length")
    Debug.Print "Second element of b: "; jsArray.getItem(1)

    Debug.Print "Iterate over all keys ..."
    Dim keys As Object
    Set keys = jsObj.getKeys("all")

    Dim i As Integer
    For i = 0 To keys.getItem("length") - 1
        Debug.Print keys.getItem(i) & ": " & jsObj.getItem(keys.getItem(i))
    Next i

    Call closeJSON
End Sub

выходы

Construction JS object ...
Object: {
    "a": 1,
    "b": [
        13,
        1.4142135623730951,
        15
    ]
}
Parsing JS object ...
a: 1
Length of b: 3
Second element of b:  1,4142135623731 
Iterate over all keys ...
a: 1
b: 13,1.4142135623730951,15
person Wolfgang Kuehn    schedule 09.02.2014

Надеюсь, это будет большим подспорьем для тех, кто продолжает заходить на эту страницу после поиска по запросу "vba json".

Я нашел эту страницу очень полезной. Он предоставляет несколько классов VBA, совместимых с Excel, которые имеют дело с обработкой данных в формате JSON.

person Noel Llevares    schedule 14.06.2012
comment
Какой из них вы бы порекомендовали? - person Koray Tugay; 07.10.2014

VBA-JSON Тима Холла, под лицензией MIT и на GitHub. Это еще одна ветвь vba-json, появившаяся в конце 2014 года. Заявления о работе на Mac Office и Windows 32- и 64-разрядная версии.

person Patrick Böker    schedule 09.07.2015
comment
Включено в VBA-Web, идеально подходящее для веб-запросов. Работает и на Mac. - person ComputerVersteher; 12.09.2019

ОБНОВЛЕНИЕ: обнаружен более безопасный способ синтаксического анализа JSON, чем использование Eval, это сообщение в блоге показывает опасности Eval ... http://exceldevelopmentplatform.blogspot.com/2018/01/vba-parse-json-safer-with-jsonparse-and.html

Поздно к этой вечеринке, но извините, ребята, но, безусловно, самый простой способ - использовать Microsoft Script Control. Пример кода, который использует VBA.CallByName для детализации

'Tools->References->
'Microsoft Script Control 1.0;  {0E59F1D2-1FBE-11D0-8FF2-00A0D10038BC}; C:\Windows\SysWOW64\msscript.ocx

Private Sub TestJSONParsingWithCallByName()

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

    Dim sJsonString As String
    sJsonString = "{'key1': 'value1'  ,'key2': { 'key3': 'value3' } }"


    Dim objJSON As Object
    Set objJSON = oScriptEngine.Eval("(" + sJsonString + ")")
    Debug.Assert VBA.CallByName(objJSON, "key1", VbGet) = "value1"
    Debug.Assert VBA.CallByName(VBA.CallByName(objJSON, "key2", VbGet), "key3", VbGet) = "value3"

End Sub

На самом деле я сделал серию вопросов и ответов, посвященных темам, связанным с JSON / VBA.

Q1 В Excel VBA в Windows, как смягчить проблему обхода синтаксиса точки в проанализированном JSON, нарушенного поведением IDE с заглавными буквами?

Q2 В Excel VBA в Windows , как пройти через анализируемый массив JSON?

Q3 В Excel VBA в Windows , как получить строковое представление JSON вместо «[object Object]» для проанализированных переменных JSON?

Q4 В Windows Excel VBA, как получить ключи JSON для предотвращения« ошибки времени выполнения '438': объект не поддерживает это свойство или метод »?

Q5 В Excel VBA в Windows , что такое JScriptTypeInfo для проанализированных переменных JSON?

person S Meaden    schedule 11.07.2016
comment
Это должен быть ответ. - person lucid_dreamer; 31.05.2017
comment
Ключи JSON чувствительны к регистру (ключи в объекте VBA, возвращаемом oScriptEngine.Eval, нет) - person drgs; 17.07.2017
comment
Похоже, это не работает на 64-битной версии, так как Microsoft не портировала это на 64-битную версию! - person RIBH; 31.01.2020

Вот "родная" библиотека VB JSON.

Можно использовать JSON, который уже есть в IE8 +. Таким образом, вы не зависите от сторонней библиотеки, которая устарела и не протестирована.

см. альтернативную версию amedeus здесь

Sub myJSONtest()


Dim oJson As Object
Set oJson = oIE_JSON() ' See below gets IE.JSON object

' using json objects
Debug.Print oJson.parse("{ ""hello"": ""world"" }").hello ' world
Debug.Print oJson.stringify(oJson.parse("{ ""hello"": ""world"" }")) ' {"hello":"world"}

' getting items
Debug.Print oJson.parse("{ ""key1"": ""value1"" }").key1 ' value1
Debug.Print oJson.parse("{ ""key1"": ""value1"" }").itemGet("key1") ' value1
Debug.Print oJson.parse("[ 1234, 4567]").itemGet(1) '  4567

' change  properties
Dim o As Object
Set o = oJson.parse("{ ""key1"": ""value1"" }")
o.propSetStr "key1", "value\""2"
Debug.Print o.itemGet("key1") ' value\"2
Debug.Print oJson.stringify(o) ' {"key1":"value\\\"2"}
o.propSetNum "key1", 123
Debug.Print o.itemGet("key1") ' 123
Debug.Print oJson.stringify(o) ' {"key1":123}

' add properties
o.propSetNum "newkey", 123 ' addkey! JS MAGIC
Debug.Print o.itemGet("newkey") ' 123
Debug.Print oJson.stringify(o) ' {"key1":123,"newkey":123}

' assign JSON 'objects' to properties
Dim o2 As Object
Set o2 = oJson.parse("{ ""object2"": ""object2value"" }")
o.propSetJSON "newkey", oJson.stringify(o2) ' set object
Debug.Print oJson.stringify(o) ' {"key1":123,"newkey":{"object2":"object2value"}}
Debug.Print o.itemGet("newkey").itemGet("object2") ' object2value

' change array items
Set o = oJson.parse("[ 1234, 4567]") '
Debug.Print oJson.stringify(o) ' [1234,4567]
Debug.Print o.itemGet(1)
o.itemSetStr 1, "234"
Debug.Print o.itemGet(1)
Debug.Print oJson.stringify(o) ' [1234,"234"]
o.itemSetNum 1, 234
Debug.Print o.itemGet(1)
Debug.Print oJson.stringify(o) ' [1234,234]

' add array items
o.itemSetNum 5, 234 ' add items! JS Magic
Debug.Print o.itemGet(5) ' 234
Debug.Print oJson.stringify(o) ' [1234,234,null,null,null,234]

' assign JSON object to array item
o.itemSetJSON 3, oJson.stringify(o2)  ' assign object
Debug.Print o.itemGet(3) '[object Object]
Debug.Print oJson.stringify(o.itemGet(3)) ' {"object2":"object2value"}
Debug.Print oJson.stringify(o) ' [1234,234,null,{"object2":"object2value"},null,234]


oIE_JSON_Quit ' quit IE, must shut down or the IE sessions remain.
Debug.Print oJson.stringify(o) ' can use after but but IE server will shutdown... soon
End Sub

Вы можете подключиться к IE.JSON из VB.
Создайте функцию oIE_JSON

Public g_IE As Object ' global


Public Function oIE_JSON() As Object


    ' for array access o.itemGet(0) o.itemGet("key1")
    JSON_COM_extentions = "" & _
            " Object.prototype.itemGet        =function( i ) { return this[i] }   ;            " & _
            " Object.prototype.propSetStr     =function( prop , val ) { eval('this.' + prop + '  = ""' + protectDoubleQuotes (val) + '""' )   }    ;            " & _
            " Object.prototype.propSetNum     =function( prop , val ) { eval('this.' + prop + '  = ' + val + '')   }    ;            " & _
            " Object.prototype.propSetJSON    =function( prop , val ) { eval('this.' + prop + '  = ' + val + '')   }    ;            " & _
            " Object.prototype.itemSetStr     =function( prop , val ) { eval('this[' + prop + '] = ""' + protectDoubleQuotes (val) + '""' )   }    ;            " & _
            " Object.prototype.itemSetNum     =function( prop , val ) { eval('this[' + prop + '] = ' + val )   }    ;            " & _
            " Object.prototype.itemSetJSON    =function( prop , val ) { eval('this[' + prop + '] = ' + val )   }    ;            " & _
            " function protectDoubleQuotes (str)   { return str.replace(/\\/g, '\\\\').replace(/""/g,'\\""');   }"

    ' document.parentwindow.eval dosen't work some versions of ie eg ie10?
     IEEvalworkaroundjs = "" & _
         " function IEEvalWorkAroundInit ()   { " & _
         " var x=document.getElementById(""myIEEvalWorkAround"");" & _
         " x.IEEval= function( s ) { return eval(s) } ; } ;"

    g_JS_framework = "" & _
      JSON_COM_extentions & _
      IEEvalworkaroundjs

    ' need IE8 and DOC type
    g_JS_HTML = "<!DOCTYPE html>  " & _
         " <script>" & g_JS_framework & _
                  "</script>" & _
         " <body>" & _
         "<script  id=""myIEEvalWorkAround""  onclick=""IEEvalWorkAroundInit()""  ></script> " & _
                 " HEllo</body>"

On Error GoTo error_handler

' Create InternetExplorer Object
Set g_IE = CreateObject("InternetExplorer.Application")
With g_IE
    .navigate "about:blank"
    Do While .Busy: DoEvents: Loop
    Do While .ReadyState <> 4: DoEvents: Loop
    .Visible = False ' control IE interface window
    .Document.Write g_JS_HTML
End With

Set objID = g_IE.Document.getElementById("myIEEvalWorkAround")
objID.Click ' create  eval
Dim oJson As Object

'Set oJson = g_IE.Document.parentWindow.Eval("JSON") ' dosen't work some versions of IE
Set oJson = objID.IEEval("JSON")

Set objID = Nothing
Set oIE_JSON = oJson

Exit Function
error_handler:
MsgBox ("Unexpected Error, I'm quitting. " & Err.Description & ".  " & Err.Number)
g_IE.Quit
Set g_IE = Nothing

End Function

Public Function oIE_JSON_Quit()
         g_IE.Quit
         Exit Function
End Function

Проголосуйте за, если сочтете полезным

person ozmike    schedule 11.11.2013
comment
Не работает с Excel 2013 и IE10: невозможно вызвать методы для возвращенного объекта JSON. Все, что я могу сделать, это cstr(oJson), что действительно дает [объект JSON] - person Wolfgang Kuehn; 09.02.2014
comment
спасибо, у меня нет 2013 года для тестирования, но как только я это сделаю, я изучу его. Если вы можете найти решение, сообщите нам. - person ozmike; 12.02.2014

VB6 - JsonBag, еще один парсер / генератор JSON также должен быть легко импортирован в VBA.

person Bob77    schedule 21.10.2013

Поскольку Json - это не что иное, как строки, с ним легко справиться, если мы сможем правильно управлять им, независимо от того, насколько сложна структура. Я не думаю, что для этого нужно использовать какую-либо внешнюю библиотеку или конвертер. Вот пример, в котором я проанализировал данные json, используя манипуляции со строками.

Sub GetJsonContent()
    Dim http As New XMLHTTP60, itm As Variant

    With http
        .Open "GET", "http://jsonplaceholder.typicode.com/users", False
        .send
        itm = Split(.responseText, "id"":")
    End With

    x = UBound(itm)

    For y = 1 To x
        Cells(y, 1) = Split(Split(itm(y), "name"": """)(1), """")(0)
        Cells(y, 2) = Split(Split(itm(y), "username"": """)(1), """")(0)
        Cells(y, 3) = Split(Split(itm(y), "email"": """)(1), """")(0)
        Cells(y, 4) = Split(Split(itm(y), "street"": """)(1), """")(0)
    Next y
End Sub
person SIM    schedule 16.06.2017
comment
Это будет работать для простых объектов JSON. Он недостаточно универсален для объектов с вложенными коллекциями и вложенными объектами. - person John Foll; 08.08.2019

Я бы предложил использовать компонент .Net. Вы можете использовать компоненты .Net из VB6 через Interop - это руководство. Я предполагаю, что компоненты .Net будут более надежными и лучше поддерживаются, чем все, что создано для VB6.

В платформе Microsoft .Net есть такие компоненты, как DataContractJsonSerializer или JavaScriptSerializer. Вы также можете использовать сторонние библиотеки, такие как JSON.NET.

person MarkJ    schedule 07.05.2010
comment
Спасибо за предложение. Вы хорошо заметили, что компоненты .NET будут поддерживаться лучше, чем что-либо в VB6. Это, безусловно, так. Однако (и я могу ошибаться здесь), JSON достаточно прост, и даже VB6 не должен иметь с ним проблем. Код VB-JSON, о котором я упоминал, до сих пор работал очень хорошо. - person Ben McCormack; 07.05.2010
comment
@Ben JSON прост, но вы говорите, что в проекте кода Google, использованном в качестве отправной точки, все еще есть несколько ошибок, поэтому все еще можно ошибиться. - person MarkJ; 07.05.2010

Вы можете написать надстройку Excel-DNA на VB.NET. Excel-DNA - это тонкая библиотека, которая позволяет писать XLL-файлы в .NET. Таким образом вы получаете доступ ко всей вселенной .NET и можете использовать такие вещи, как http://james.newtonking.com/json - фреймворк JSON, который десериализует JSON в любом настраиваемом классе.

Если вам интересно, вот описание того, как создать общий клиент Excel JSON для Excel с помощью VB.NET:

http://optionexplicitvba.com/2014/05/09/developing-a-json-excel-add-in-with-vb-net/

А вот ссылка на код: https://github.com/spreadgit/excel-json-client/blob/master/excel-json-client.dna

person Bjorn Stiel    schedule 11.05.2014

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

Ссылка на JsonObject

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

person DanH    schedule 22.05.2019

Используя функции 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 здесь.

person cyboashu    schedule 13.11.2014

это пример кода 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
person remon78eg    schedule 22.11.2017

Формула в ячейке 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

  • ИНСТРУКЦИИ:
  • Шаг 1. нажмите ALT + F11
  • Шаг 2. Вставить -> Модуль
  • Шаг 3. инструменты -> ссылки -> отметьте Microsoft Script Control 1.0
  • Шаг 4. вставьте это ниже.
  • Шаг 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
person hamish    schedule 29.08.2016