1) Слово (и превосходство, возможно, и другие) - это форма XML. Поэтому моей первой попыткой было создание текстового документа. Таким образом, мы сможем просто объединить данные JSON. Это было слишком сложно для меня.
2) Второй попыткой был документ Excel, встроенный в текстовый документ. В Excel есть вкладка Data
, которая позволяет импортировать from JSON
в современных версиях. В более старых версиях, которые не поддерживают импорт JSON напрямую, я просто импортировал from web
и предоставил строку JSON в качестве тела HTML документа. Я полагаю, вы сейчас делаете что-то подобное. Это сработало, но выглядело очень плохо.
3) В конце я просто написал функцию ajax и метод доступа в VBA, чтобы мы могли использовать их в старых версиях excel и word с макросами.
' Provide URL to a resource, get parsed JSON version back.
' XMLHttpRequest() is native as MSXML2.XMLHTTP
' JScript was the MS implementation of javascript.
' Since JSON is valid javascript, the JScript parser can eval our JSON string
' Caveat: we can't directly access the values yet, so use getJSVal() to get the values.
' Caveat: no authentication on the request.
Public Function ajax(endpoint As String) As Object
Dim HTTP As Object
Dim parser As Object
Dim json As Object
Set HTTP = CreateObject("MSXML2.XMLHTTP")
Set parser = CreateObject("MSScriptControl.ScriptControl")
HTTP.Open "GET", endpoint, False
'extra headers the service expects
'HTTP.setRequestHeader "x-header-name", "header-value"
HTTP.send
parser.Language = "JScript"
Set json = parser.Eval("(" + HTTP.responseText + ")")
HTTP.abort
Set ajax = json
End Function
И
' Grab an object by key name from the JS object we loaded and parsed.
' We can't access this directly without installing a parser that converts the JSON to actual variables.
' See the Microsoft Office App Store for the official free JSON-To-Excel converter
Public Function getJSVal(json As Object, key As String) As Variant
Dim result As Variant
result = VBA.CallByName(json, key, VbGet)
If IsNull(result) Then
getJSVal = 0#
Else
getJSVal = result
End If
End Function
Как только мы обновим наши старые версии Office, мы начнем использовать один из официальных JSON анализаторов для Office.