Parse JSON – Converter in Excel
This name often reminds me of the film Jason Bourne. But this JSON is a file format standard.
In this page, You can get JSON converter with Excel VBA Code & sample JSON file. (In case, If you are looking for Python JSON Parser click this page which has a easy Python code )
Using this code, We will read data in JSON & parse the details to Excel , Txt or CSV file.
Parser – JSON To Excel – VBA Macro Code
Try this right away by creating a new Excel workbook. Save it in .xlsm format, press Alt + F11 to view the VB editor for Excel. Then follow these important preliminary steps.
Important steps before putting this JSON Parser to work:
- Go to this Page & download the JsonConverter.bas
- Include this .bas module in your VBA project.
- In VB editor, goto Tool->References & enable “Microsoft Scripting Runtime” checkbox.
Now, copy paste this code to your VBA Project into a new module.
Sub Convert_JSON_To_CSV()
Dim JSON As Object, jsonNode, jsonList, menuList, menuItem
Dim jsonStr As String
'Open JSON File
fname = "D:\JSON2.txt"
IFile = FreeFile
Open fname For Input As #IFile
jsonStr = Input$(LOF(IFile), IFile)
Close IFile
'Parse JSON to Dictionary
Set JSON = ParseJson(jsonStr)
'Read JSON Data from Dictionary
Set jsonList = JSON("menu")
'MsgBox jsonList("id")
'To Write to CSV
fname = "D:\JSON2CSV.CSV"
IFile = FreeFile
Open fname For Output As #IFile
'Loop thru Each Node in JSON
Dim csvStr As String, csvStrHDR As String
csvStrHDR = ""
For Each jsonNode In jsonList.Keys
If csvStrHDR = "" Then
csvStrHDR = jsonNode
Else
csvStrHDR = csvStrHDR & "," & jsonNode
End If
Next
Print #IFile, csvStrHDR
csvStr = ""
csvStrHDR = ""
For Each jsonNode In jsonList.Items
If VBA.TypeName(jsonNode) = "String" Then
'MsgBox jsonNode
If csvStrHDR = "" Then
csvStrHDR = jsonNode
Else
csvStrHDR = csvStrHDR & "," & jsonNode
End If
Else
If VBA.InStr(1, VBA.TypeName(jsonNode), "Dictionary", vbTextCompare) > 0 Then
Set menuList = jsonList("popup")("menuitem")
For Each menuItem In menuList
csvStr = csvStrHDR & "," & menuItem("value") & "," & menuItem("onclick")
Print #IFile, csvStr
Next
End If
End If
Next
'Process Completed
Close #IFile
MsgBox "Process Completed"
End Sub
We are going to use the ParseJson module that is present in the above .Bas file. The parsed data will be moved to a dictionary data type variable.
To enable this dictionary data type option, we need the Microsoft Scripting Runtime option added in references.
This JsonConverter.bas is a miracle module that works like a charm and free to use for personal use. Please read the license details & sample code available in that page to know more about it.
But, if you are looking to parse any simple JSON file, then this code will work just fine.
JSON Sample file
{"menu": {
"id": "officetricks",
"value": "Blog",
"popup": {
"menuitem": [
{"value": "New", "onclick": "jsontotext"},
{"value": "Open", "onclick": "jsontocsv"},
{"value": "Close", "onclick": "jsontoxls"}
]
}
}}
If you don’t have a JSON file, use this sample file for testing the above code.
If you are very much new to this file format, get few technical aspects of it from this page. This file formatting is gaining more popular. In websites, in older days xml file was more widely used. But nowadays JSON is getting used more than any CSV, XML file formats.
Rather than using Excel to parse a JSON file, it is widely used in programming languages like PHP & Python. Because these are the programming languages that widely support Web technologies.
This code can handle nested objects with JSON as well.
Dear Sir, Thank you for your article. I’ve copied VBscript in to VB in excel develper and Json.txt file in to D drive. then added Microsoft Scripting Runtime in tools. Still it is not working
Dear Sunil, Please copy the JsonConverter.bas as mentioned in the step1 of Important notes.
Regarding your email for getting custom code to convert gour JSON: please contact in Fiverr.com My Id: kumarapush777 for customized Appd. My team will provide you a feasible quote.
Thanks much for your interest.
Thanks for your reply…