Хочу заметить, что вы уже отредактировали JSON и вопрос несколько:
Из вашего предыдущего вопроса: Вы были почти там. Ниже я читаю JSON из файла.
{
означает словарь для доступа по ключу, [
означает коллекцию для доступа по индексу. ""
означает строковый литерал, поэтому вы читаете как есть. Я использую парсер JSON для обработки чтения JSON из файла. После добавления .bas
из этой ссылки в ваш проект вы затем добавляете ссылку через VBE> Инструменты> Ссылки> Microsoft Scripting Runtime.
Если вы изучите структуру JSON, чтобы увидеть, где находятся id
в пределах readings
, вы увидите, что начальный объект - это коллекция. readings
находится в первом элементе этой коллекции, которая является словарем. readings
- это ключ, который возвращает коллекцию словарей:
Set json = JsonConverter.ParseJson(jsonText)(1)("readings")
Итак, вы просматриваете коллекцию словарей в приведенном ниже коде, где каждый item
является словарем. Вы можете зациклить ключи словаря, получить доступ и использовать ключ (например, id
) для каждого словаря в нем, чтобы получить соответствующее значение.
Option Explicit
Public Sub ReadValues()
Dim fso As Object, stream As Object, jsonText As String, item As Object
Dim json As Object, ws As Worksheet, i As Long
Set ws = ThisWorkbook.Worksheets("Sheet1")
Set fso = CreateObject("Scripting.FileSystemObject")
Set stream = fso.OpenTextFile("C:\Users\HarrisQ\Desktop\test.json", ForReading)
jsonText = stream.ReadAll
stream.Close
Set json = JsonConverter.ParseJson(jsonText)(1)("readings") 'Collection of dictionaries
Dim c As Long, key As Variant, arr(), r As Long
With ws
arr() = json(1).keys
.Cells(1, 1).Resize(1, UBound(arr) + 1) = arr
r = 2
For Each item In json
c = 1
For Each key In item
.Cells(r, c).Value = item(key)
c = c + 1
Next
r = r + 1
Next
End With
End Sub
С вашим исправленным вопросом:
Option Explicit
Public Sub CallChildDate(id As String)
Dim json As Object, item As Object, ws As Worksheet, i As Long
Set ws = ThisWorkbook.Worksheets("Sheet1")
With CreateObject("MSXML2.XMLHTTP")
.Open "GET", id, False '<==Assuming id is actually a URL and not to be concantenated with your former variable strURL.
.send
Set json = JsonConverter.ParseJson(.responseText)(1)("readings") 'Collection of dictionaries
End With
Dim c As Long, key As Variant, arr(), r As Long
With ws
arr() = json(1).keys
.Cells(1, 1).Resize(1, UBound(arr) + 1) = arr
r = 2
For Each item In json
c = 1
For Each key In item
.Cells(r, c).Value = item(key)
c = c + 1
Next
r = r + 1
Next
End With
End Sub
Вывод с использованием вашей исходной строки JSON: