vba json read sub array how to read
API using get it bellow json data
[
"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
How to get it above "readings" data get assign in cell value. how to "readings" array data get for each using assn in cell.
excel vba excel-vba
add a comment |
API using get it bellow json data
[
"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
How to get it above "readings" data get assign in cell value. how to "readings" array data get for each using assn in cell.
excel vba excel-vba
What have you done so far? A good place to start is here: github.com/VBA-tools/VBA-JSON
– Tim Williams
Nov 10 at 6:30
I have assign above json value assign variable "JSON" For Each Item In JSON For i = 1 To 10 Sheets(1).Cells(i, 1).Value = Item("readings")(i)("Id") Next i Next But Not working, sub json array how to get it.
– R saravanan
Nov 10 at 6:44
If you have code, edit your question to add it. Code in comments is not very readable. "Not working" also needs some explanation - does it error? If Yes what error do you get?
– Tim Williams
Nov 10 at 6:46
Hi have change my questions
– R saravanan
Nov 10 at 7:08
should be easier to connect to the JSON file with Excel Power Query support.office.com/en-us/article/…
– Slai
Nov 10 at 8:44
add a comment |
API using get it bellow json data
[
"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
How to get it above "readings" data get assign in cell value. how to "readings" array data get for each using assn in cell.
excel vba excel-vba
API using get it bellow json data
[
"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
How to get it above "readings" data get assign in cell value. how to "readings" array data get for each using assn in cell.
excel vba excel-vba
excel vba excel-vba
edited Nov 12 at 7:19
Pᴇʜ
20.2k42650
20.2k42650
asked Nov 10 at 6:27
R saravanan
33
33
What have you done so far? A good place to start is here: github.com/VBA-tools/VBA-JSON
– Tim Williams
Nov 10 at 6:30
I have assign above json value assign variable "JSON" For Each Item In JSON For i = 1 To 10 Sheets(1).Cells(i, 1).Value = Item("readings")(i)("Id") Next i Next But Not working, sub json array how to get it.
– R saravanan
Nov 10 at 6:44
If you have code, edit your question to add it. Code in comments is not very readable. "Not working" also needs some explanation - does it error? If Yes what error do you get?
– Tim Williams
Nov 10 at 6:46
Hi have change my questions
– R saravanan
Nov 10 at 7:08
should be easier to connect to the JSON file with Excel Power Query support.office.com/en-us/article/…
– Slai
Nov 10 at 8:44
add a comment |
What have you done so far? A good place to start is here: github.com/VBA-tools/VBA-JSON
– Tim Williams
Nov 10 at 6:30
I have assign above json value assign variable "JSON" For Each Item In JSON For i = 1 To 10 Sheets(1).Cells(i, 1).Value = Item("readings")(i)("Id") Next i Next But Not working, sub json array how to get it.
– R saravanan
Nov 10 at 6:44
If you have code, edit your question to add it. Code in comments is not very readable. "Not working" also needs some explanation - does it error? If Yes what error do you get?
– Tim Williams
Nov 10 at 6:46
Hi have change my questions
– R saravanan
Nov 10 at 7:08
should be easier to connect to the JSON file with Excel Power Query support.office.com/en-us/article/…
– Slai
Nov 10 at 8:44
What have you done so far? A good place to start is here: github.com/VBA-tools/VBA-JSON
– Tim Williams
Nov 10 at 6:30
What have you done so far? A good place to start is here: github.com/VBA-tools/VBA-JSON
– Tim Williams
Nov 10 at 6:30
I have assign above json value assign variable "JSON" For Each Item In JSON For i = 1 To 10 Sheets(1).Cells(i, 1).Value = Item("readings")(i)("Id") Next i Next But Not working, sub json array how to get it.
– R saravanan
Nov 10 at 6:44
I have assign above json value assign variable "JSON" For Each Item In JSON For i = 1 To 10 Sheets(1).Cells(i, 1).Value = Item("readings")(i)("Id") Next i Next But Not working, sub json array how to get it.
– R saravanan
Nov 10 at 6:44
If you have code, edit your question to add it. Code in comments is not very readable. "Not working" also needs some explanation - does it error? If Yes what error do you get?
– Tim Williams
Nov 10 at 6:46
If you have code, edit your question to add it. Code in comments is not very readable. "Not working" also needs some explanation - does it error? If Yes what error do you get?
– Tim Williams
Nov 10 at 6:46
Hi have change my questions
– R saravanan
Nov 10 at 7:08
Hi have change my questions
– R saravanan
Nov 10 at 7:08
should be easier to connect to the JSON file with Excel Power Query support.office.com/en-us/article/…
– Slai
Nov 10 at 8:44
should be easier to connect to the JSON file with Excel Power Query support.office.com/en-us/article/…
– Slai
Nov 10 at 8:44
add a comment |
1 Answer
1
active
oldest
votes
I note you have now edited the JSON and the question somewhat:
From your prior question: You were almost there. Below I am reading the JSON in from a file.
The {
means a dictionary so you access by key, the [
means a collection so you access by index. ""
means a string literal so you read as is. I use a JSON parser to handle the JSON read in from file. After adding the .bas
from that link to your project you then add a reference via VBE > Tools > References > Microsoft Scripting Runtime.
If you examine the JSON structure to see where the id
s within readings
are you will see the initial object is a collection. readings
is in the first item of that collection which is a dictionary. readings
is the key that returns an collection of dictionaries:
Set json = JsonConverter.ParseJson(jsonText)(1)("readings")
So, you are looping over a collection of dictionaries in the code below where each item
is a dictionary. You can the loop the dictionary keys and access and use the key (e.g. id
) for each dictionary within to retrieve the associated value.
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:UsersHarrisQDesktoptest.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
With your revised question:
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
Output using your initial JSON string:
i am not working in json file i'm working in api data get abow json data your code not working. "ParseJson(jsonText)(1)("readings")" Error now.
– R saravanan
Nov 10 at 9:28
how to get in sub array is more then array list. how to working now.
– R saravanan
Nov 10 at 9:30
You haven't included the rest of your code so I have had to read your JSON from file. You would have a line that read something like Set json = JsonConverter.ParseJson(.responseText)(1)("readings") or xmlhttpobject.responseText (what ever variable is holding the xmlhttp object if using XHR request.)
– QHarr
Nov 10 at 9:42
how to get in sub array is more then array list. how to working now what does that mean? My code writes all the ids out to the sheet. To get every item in the inner dictionaries simply loop all the keys.
– QHarr
Nov 10 at 9:43
See edits to answer.
– QHarr
Nov 10 at 10:03
|
show 1 more comment
Your Answer
StackExchange.ifUsing("editor", function ()
StackExchange.using("externalEditor", function ()
StackExchange.using("snippets", function ()
StackExchange.snippets.init();
);
);
, "code-snippets");
StackExchange.ready(function()
var channelOptions =
tags: "".split(" "),
id: "1"
;
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function()
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled)
StackExchange.using("snippets", function()
createEditor();
);
else
createEditor();
);
function createEditor()
StackExchange.prepareEditor(
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader:
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
,
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
);
);
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53236528%2fvba-json-read-sub-array-how-to-read%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
I note you have now edited the JSON and the question somewhat:
From your prior question: You were almost there. Below I am reading the JSON in from a file.
The {
means a dictionary so you access by key, the [
means a collection so you access by index. ""
means a string literal so you read as is. I use a JSON parser to handle the JSON read in from file. After adding the .bas
from that link to your project you then add a reference via VBE > Tools > References > Microsoft Scripting Runtime.
If you examine the JSON structure to see where the id
s within readings
are you will see the initial object is a collection. readings
is in the first item of that collection which is a dictionary. readings
is the key that returns an collection of dictionaries:
Set json = JsonConverter.ParseJson(jsonText)(1)("readings")
So, you are looping over a collection of dictionaries in the code below where each item
is a dictionary. You can the loop the dictionary keys and access and use the key (e.g. id
) for each dictionary within to retrieve the associated value.
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:UsersHarrisQDesktoptest.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
With your revised question:
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
Output using your initial JSON string:
i am not working in json file i'm working in api data get abow json data your code not working. "ParseJson(jsonText)(1)("readings")" Error now.
– R saravanan
Nov 10 at 9:28
how to get in sub array is more then array list. how to working now.
– R saravanan
Nov 10 at 9:30
You haven't included the rest of your code so I have had to read your JSON from file. You would have a line that read something like Set json = JsonConverter.ParseJson(.responseText)(1)("readings") or xmlhttpobject.responseText (what ever variable is holding the xmlhttp object if using XHR request.)
– QHarr
Nov 10 at 9:42
how to get in sub array is more then array list. how to working now what does that mean? My code writes all the ids out to the sheet. To get every item in the inner dictionaries simply loop all the keys.
– QHarr
Nov 10 at 9:43
See edits to answer.
– QHarr
Nov 10 at 10:03
|
show 1 more comment
I note you have now edited the JSON and the question somewhat:
From your prior question: You were almost there. Below I am reading the JSON in from a file.
The {
means a dictionary so you access by key, the [
means a collection so you access by index. ""
means a string literal so you read as is. I use a JSON parser to handle the JSON read in from file. After adding the .bas
from that link to your project you then add a reference via VBE > Tools > References > Microsoft Scripting Runtime.
If you examine the JSON structure to see where the id
s within readings
are you will see the initial object is a collection. readings
is in the first item of that collection which is a dictionary. readings
is the key that returns an collection of dictionaries:
Set json = JsonConverter.ParseJson(jsonText)(1)("readings")
So, you are looping over a collection of dictionaries in the code below where each item
is a dictionary. You can the loop the dictionary keys and access and use the key (e.g. id
) for each dictionary within to retrieve the associated value.
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:UsersHarrisQDesktoptest.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
With your revised question:
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
Output using your initial JSON string:
i am not working in json file i'm working in api data get abow json data your code not working. "ParseJson(jsonText)(1)("readings")" Error now.
– R saravanan
Nov 10 at 9:28
how to get in sub array is more then array list. how to working now.
– R saravanan
Nov 10 at 9:30
You haven't included the rest of your code so I have had to read your JSON from file. You would have a line that read something like Set json = JsonConverter.ParseJson(.responseText)(1)("readings") or xmlhttpobject.responseText (what ever variable is holding the xmlhttp object if using XHR request.)
– QHarr
Nov 10 at 9:42
how to get in sub array is more then array list. how to working now what does that mean? My code writes all the ids out to the sheet. To get every item in the inner dictionaries simply loop all the keys.
– QHarr
Nov 10 at 9:43
See edits to answer.
– QHarr
Nov 10 at 10:03
|
show 1 more comment
I note you have now edited the JSON and the question somewhat:
From your prior question: You were almost there. Below I am reading the JSON in from a file.
The {
means a dictionary so you access by key, the [
means a collection so you access by index. ""
means a string literal so you read as is. I use a JSON parser to handle the JSON read in from file. After adding the .bas
from that link to your project you then add a reference via VBE > Tools > References > Microsoft Scripting Runtime.
If you examine the JSON structure to see where the id
s within readings
are you will see the initial object is a collection. readings
is in the first item of that collection which is a dictionary. readings
is the key that returns an collection of dictionaries:
Set json = JsonConverter.ParseJson(jsonText)(1)("readings")
So, you are looping over a collection of dictionaries in the code below where each item
is a dictionary. You can the loop the dictionary keys and access and use the key (e.g. id
) for each dictionary within to retrieve the associated value.
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:UsersHarrisQDesktoptest.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
With your revised question:
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
Output using your initial JSON string:
I note you have now edited the JSON and the question somewhat:
From your prior question: You were almost there. Below I am reading the JSON in from a file.
The {
means a dictionary so you access by key, the [
means a collection so you access by index. ""
means a string literal so you read as is. I use a JSON parser to handle the JSON read in from file. After adding the .bas
from that link to your project you then add a reference via VBE > Tools > References > Microsoft Scripting Runtime.
If you examine the JSON structure to see where the id
s within readings
are you will see the initial object is a collection. readings
is in the first item of that collection which is a dictionary. readings
is the key that returns an collection of dictionaries:
Set json = JsonConverter.ParseJson(jsonText)(1)("readings")
So, you are looping over a collection of dictionaries in the code below where each item
is a dictionary. You can the loop the dictionary keys and access and use the key (e.g. id
) for each dictionary within to retrieve the associated value.
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:UsersHarrisQDesktoptest.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
With your revised question:
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
Output using your initial JSON string:
edited Nov 10 at 10:02
answered Nov 10 at 7:52
QHarr
29.9k81841
29.9k81841
i am not working in json file i'm working in api data get abow json data your code not working. "ParseJson(jsonText)(1)("readings")" Error now.
– R saravanan
Nov 10 at 9:28
how to get in sub array is more then array list. how to working now.
– R saravanan
Nov 10 at 9:30
You haven't included the rest of your code so I have had to read your JSON from file. You would have a line that read something like Set json = JsonConverter.ParseJson(.responseText)(1)("readings") or xmlhttpobject.responseText (what ever variable is holding the xmlhttp object if using XHR request.)
– QHarr
Nov 10 at 9:42
how to get in sub array is more then array list. how to working now what does that mean? My code writes all the ids out to the sheet. To get every item in the inner dictionaries simply loop all the keys.
– QHarr
Nov 10 at 9:43
See edits to answer.
– QHarr
Nov 10 at 10:03
|
show 1 more comment
i am not working in json file i'm working in api data get abow json data your code not working. "ParseJson(jsonText)(1)("readings")" Error now.
– R saravanan
Nov 10 at 9:28
how to get in sub array is more then array list. how to working now.
– R saravanan
Nov 10 at 9:30
You haven't included the rest of your code so I have had to read your JSON from file. You would have a line that read something like Set json = JsonConverter.ParseJson(.responseText)(1)("readings") or xmlhttpobject.responseText (what ever variable is holding the xmlhttp object if using XHR request.)
– QHarr
Nov 10 at 9:42
how to get in sub array is more then array list. how to working now what does that mean? My code writes all the ids out to the sheet. To get every item in the inner dictionaries simply loop all the keys.
– QHarr
Nov 10 at 9:43
See edits to answer.
– QHarr
Nov 10 at 10:03
i am not working in json file i'm working in api data get abow json data your code not working. "ParseJson(jsonText)(1)("readings")" Error now.
– R saravanan
Nov 10 at 9:28
i am not working in json file i'm working in api data get abow json data your code not working. "ParseJson(jsonText)(1)("readings")" Error now.
– R saravanan
Nov 10 at 9:28
how to get in sub array is more then array list. how to working now.
– R saravanan
Nov 10 at 9:30
how to get in sub array is more then array list. how to working now.
– R saravanan
Nov 10 at 9:30
You haven't included the rest of your code so I have had to read your JSON from file. You would have a line that read something like Set json = JsonConverter.ParseJson(.responseText)(1)("readings") or xmlhttpobject.responseText (what ever variable is holding the xmlhttp object if using XHR request.)
– QHarr
Nov 10 at 9:42
You haven't included the rest of your code so I have had to read your JSON from file. You would have a line that read something like Set json = JsonConverter.ParseJson(.responseText)(1)("readings") or xmlhttpobject.responseText (what ever variable is holding the xmlhttp object if using XHR request.)
– QHarr
Nov 10 at 9:42
how to get in sub array is more then array list. how to working now what does that mean? My code writes all the ids out to the sheet. To get every item in the inner dictionaries simply loop all the keys.
– QHarr
Nov 10 at 9:43
how to get in sub array is more then array list. how to working now what does that mean? My code writes all the ids out to the sheet. To get every item in the inner dictionaries simply loop all the keys.
– QHarr
Nov 10 at 9:43
See edits to answer.
– QHarr
Nov 10 at 10:03
See edits to answer.
– QHarr
Nov 10 at 10:03
|
show 1 more comment
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Some of your past answers have not been well-received, and you're in danger of being blocked from answering.
Please pay close attention to the following guidance:
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53236528%2fvba-json-read-sub-array-how-to-read%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
What have you done so far? A good place to start is here: github.com/VBA-tools/VBA-JSON
– Tim Williams
Nov 10 at 6:30
I have assign above json value assign variable "JSON" For Each Item In JSON For i = 1 To 10 Sheets(1).Cells(i, 1).Value = Item("readings")(i)("Id") Next i Next But Not working, sub json array how to get it.
– R saravanan
Nov 10 at 6:44
If you have code, edit your question to add it. Code in comments is not very readable. "Not working" also needs some explanation - does it error? If Yes what error do you get?
– Tim Williams
Nov 10 at 6:46
Hi have change my questions
– R saravanan
Nov 10 at 7:08
should be easier to connect to the JSON file with Excel Power Query support.office.com/en-us/article/…
– Slai
Nov 10 at 8:44