API, использующий данные ниже json
[{
"Id":"8",
"Date":"12/11/2018",
"readings":[{"Id":"61","DailyLogBookID":"8","Substation":"MS-1","LoadMax":"898","LoadMin":"9898","VoltageMax":"98","VoltageMin":"98","FrequencyMax":"988","FrequencyMin":"9898","PFMax":"988","PFMin":"989","PowerDip":"9898","Remarks":"9898"},
{"Id":"62","DailyLogBookID":"8","Substation":"MS-2","LoadMax":"9889","LoadMin":"98","VoltageMax":"98","VoltageMin":"889","FrequencyMax":"9898","FrequencyMin":"98","PFMax":"98","PFMin":"98","PowerDip":"98","Remarks":"98"}
]}]
/*************VBA Code************/
Sub CallChildDate(id As String)
Dim http As Object, JSON As Object, i, j As Integer
Set http = CreateObject("MSXML2.XMLHTTP")
Dim strUrl As String
http.Open "GET", id, False
http.send
Set JSON = ParseJson(http.responseText)
i = 1
For Each item In JSON
Sheets(1).Cells(i, 1).Value = item("Id")
Sheets(1).Cells(i, 2).Value = item("Date")
i = i + 1
Next
End Sub
Как получить это выше "показаний" данных присваивается в значении ячейки. как получить данные массива "чтения" для каждого с помощью assn в ячейке.
Я назначил выше значение json присвоить переменную "JSON" для каждого элемента в JSON для i = от 1 до 10 листов (1) .Cells (i, 1) .Value = Item ("чтения") (i) ("Id") Далее я Далее, но не работает, массив sub json, как его получить.
Если у вас есть код, отредактируйте свой вопрос, чтобы добавить его. Код в комментариях не очень читается. «Не работает» тоже требует пояснений - это ошибка? Если да, то какую ошибку вы получите?
Привет, измени мои вопросы
должно быть проще подключиться к файлу JSON с помощью Excel Power Query support.office.com/en-us/article/…

Я отмечаю, что вы отредактировали 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, я работаю с данными api, получаю данные json, ваш код не работает. "ParseJson (jsonText) (1) (" чтения ")" Ошибка.
как попасть в подмассив больше, чем список массивов. как работать сейчас.
Вы не включили остальную часть своего кода, поэтому мне пришлось прочитать ваш JSON из файла. У вас была бы строка, которая читала бы что-то вроде Set json = JsonConverter.ParseJson (.responseText) (1) ("чтения") или xmlhttpobject.responseText (какая-либо переменная содержит объект xmlhttp при использовании запроса XHR).
Что ты уже сделал? Хорошее место для начала здесь: github.com/VBA-tools/VBA-JSON