JSON (Javascript Object Notation) is the most used data exchange format nowadays. Microsoft Excel doesn’t have built-in support for importing JSON to excel or exporting excel data to JSON.
VBA-JSON is an excellent library for parsing JSON in VBA. Lets see how to handle JSON in Excel VBA. If you’re new to JSON then read JSON tutorial for beginners
Prerequisites
- Save your excel file as Macro-Enabled workbook (Refer screen shot below)
- Enable macros if they are not already enabled. You can enable it by cliking on file > options > Trust Center > Trust Center Settings > Enable all macros
Getting Started
- Download VBA JSON latest version from here
- Extract it, open VBA code editor in excel (Alt + F11) and import the library as shown in the gif below.
- Add a reference to Microsoft scripting runtime. (Tools > references > select)
-
Add a reference to MSXML (Tools > references)
Select appropriate version based on your PC :
1. Microsoft XML, v 3.0.
2. Microsoft XML, v 4.0 (if you have installed MSXML 4.0 separately).
3. Microsoft XML, v 5.0 (if you have installed Office 2003 – 2007 which provides MSXML 5.0 for Microsoft Office Applications).
4. Microsoft XML, v 6.0 for latest versions of MS Office.
Import JSON to Excel
This library provides a simple method ParseJson
to parse JSON string into a dictionary object which can be used to extract data. Let’s see an example.
I’m using fake data from http://jsonplaceholder.typicode.com/ which is an API service with fake Json data.
We’ll be pulling user data from http://jsonplaceholder.typicode.com/users by making a GET request which responds with Json data.
Read more about GET requests in VBA here
Next, we’ll parse that Json and import it to excel. Code for importing data looks like this :
Public Sub exceljson() Dim http As Object, JSON As Object, i As Integer Set http = CreateObject("MSXML2.XMLHTTP") http.Open "GET", "http://jsonplaceholder.typicode.com/users", False http.Send Set JSON = ParseJson(http.responseText) i = 2 For Each Item In JSON Sheets(1).Cells(i, 1).Value = Item("id") Sheets(1).Cells(i, 2).Value = Item("name") Sheets(1).Cells(i, 3).Value = Item("username") Sheets(1).Cells(i, 4).Value = Item("email") Sheets(1).Cells(i, 5).Value = Item("address")("city") Sheets(1).Cells(i, 6).Value = Item("phone") Sheets(1).Cells(i, 7).Value = Item("website") Sheets(1).Cells(i, 8).Value = Item("company")("name") i = i + 1 Next MsgBox ("complete") End Sub
Code explanation
- First, define JSON as an object and make a GET request to JSON API
- JSON data received in the response is parsed by passing it into
ParseJson
method. - parsed data is converted into a collection of dictionaries.
- Loop through the collection to get each user’s details and set its values to the first sheet.
Running above code looks like gif below.
Reading JSON from a file
In the same example above, If you want to read JSON data from a local file then you can use FileSystemObject
to read all text in the file and then pass it to ParseJson
method.
Dim FSO As New FileSystemObject Dim JsonTS As TextStream Set JsonTS = FSO.OpenTextFile("example.json", ForReading) JsonText = JsonTS.ReadAll JsonTS.Close Set JSON = ParseJson(JsonText)
Export Excel to Json
VBA-JSON provides another method ConvertToJson
which can be used to convert excel data into JSON. Here’s an example.
Sample data with Name, Phone and Email is present in second sheet. Let’s convert it into JSON
Code for this looks like :
Public Sub exceltojson() Dim rng As Range, items As New Collection, myitem As New Dictionary, i As Integer, cell As Variant set rng = Range("A2:A3") 'Set rng = Range(Sheets(2).Range("A2"), Sheets(2).Range("A2").End(xlDown)) use this for dynamic range i = 0 For Each cell In rng Debug.Print (cell.Value) myitem("name") = cell.Value myitem("email") = cell.Offset(0, 1).Value myitem("phone") = cell.Offset(0, 2).Value items.Add myitem Set myitem = Nothing i = i + 1 Next Sheets(2).Range("A4").Value = ConvertToJson(items, Whitespace:=2) End Sub
Code Explanation
- First, define
rng
as range and set it to data range. ConvertToJson
method takes a dictionary collection or array as parameter. So we should pass our data as a collection.- A Dictionary is an object with keys and values just like JSON but doesn’t support multiple items like arrays or collections, so we create a dictionary for each item and push it into an array or a collection.
- Define a dictionary and a collection, loop through the range and set each row’s data into
myitem
- Push
myitem
into collection and set it to nothing, because we are using the same dictionary to add next row’s data and push it to collection again.
Finally pass items
collection to ConvertToJson
method which returns a JSON string.
Running above code looks like gif below
Export Excel to JSON file
In the same example above, If you want to export excel data to JSON file then It can be done by opening a file for output by specifying the path of the file and printing data in it. Sample code below, Running this would save a JSON file in the current workbook’s folder.
Public Sub exceltojsonfile() Dim rng As Range, items As New Collection, myitem As New Dictionary, i As Integer, cell As Variant, myfile As String Set rng = Range("A2:A3") 'Set rng = Range(Sheets(2).Range("A2"), Sheets(2).Range("A2").End(xlDown)) use this for dynamic range i = 0 For Each cell In rng Debug.Print (cell.Value) myitem("name") = cell.Value myitem("email") = cell.Offset(0, 1).Value myitem("phone") = cell.Offset(0, 2).Value items.Add myitem Set myitem = Nothing i = i + 1 Next myfile = Application.ActiveWorkbook.Path & "data.json" Open myfile For Output As #1 Print #1, ConvertToJson(items, Whitespace:=2) Close #1 End Sub
Export Excel to Nested JSON
Above code can be modified a bit to get a nested JSON as output. Just add dictionary in another dictionary so that it creates a nested JSON. code looks like this :
Public Sub exceltonestedjson() Dim rng As Range, items As New Collection, myitem As New Dictionary, subitem As New Dictionary, i As Integer, cell As Variant Set rng = Range("A2:A3") 'Set rng = Range(Sheets(2).Range("A2"), Sheets(2).Range("A2").End(xlDown)) use this for dynamic range i = 0 For Each cell In rng Debug.Print (cell.Value) myitem("name") = cell.Value myitem("email") = cell.Offset(0, 1).Value myitem("phone") = cell.Offset(0, 2).Value subitem("country") = cell.Offset(0, 3).Value myitem.Add "location", subitem items.Add myitem Set myitem = Nothing Set subitem = Nothing i = i + 1 Next Sheets(2).Range("A4").Value = ConvertToJson(items, Whitespace:=2) End Sub
Running above code looks like image below
Using array of strings and objects in JSON
One of our readers asked me how to use an array of strings and objects inside the JSON.
Here’s how to do it:
Public Sub exceltojson() Dim rng As Range, items As New Collection, myitem As New Dictionary, i As Integer, cell As Variant, objectContainer As New Dictionary, arrayContainer As New Collection Dim j As Integer 'Set rng = Range("A2:A3") Set rng = Range(Sheets(1).Range("A2"), Sheets(1).Range("A2").End(xlDown)) 'use this for dynamic range i = 0 For Each cell In rng myitem("id") = cell.Value myitem("name") = cell.Offset(0, 1).Value 'tags tagsString = cell.Offset(0, 2).Value tagsCollection = getCollectionFromString(tagsString) myitem.Add "tags", tagsCollection 'ingredients ingredientsString = cell.Offset(0, 3).Value weightsString = cell.Offset(0, 4).Value ingredientsUnit = cell.Offset(0, 5).Value ingredientsCollection = getCollectionFromString(ingredientsString) weightsCollection = getCollectionFromString(weightsString) j = 0 For Each ingredient In ingredientsCollection objectContainer("ingredientnaam") = ingredient objectContainer("eenheid") = ingredientsUnit objectContainer("hoeveelheid") = weightsCollection(j) arrayContainer.Add objectContainer Set objectContainer = Nothing j = j + 1 Next myitem.Add "ingredienten", arrayContainer 'Reset values Set arrayContainer = Nothing j = 0 items.Add myitem Set myitem = Nothing i = i + 1 Next Sheets(1).Range("A6").Value = ConvertToJson(items, Whitespace:=2) End Sub Function getCollectionFromString(val) getCollectionFromString = Split(val, ", ") End Function
Running above code looks like image below
Wrapping up
Read official documentation of VBA-JSON here and use VBA-Dictionary for Mac Support.
Related articles :
- Complete JSON tutorial here – JSON for beginners
- Handling CSV in VBA
If you have any questions or feedback, comment below and please use CodingisLove Bin for sharing your code.
- Author
- Recent Posts
A CA- by education, self taught coder by passion, loves to explore new technologies and believes in learn by doing.
Файлы нотации объектов JSON или Javascript широко используются для хранения различных типов данных. Помимо хранения, они также используются для передачи данных между двумя серверами, и вы часто обнаружите это при общении с веб-сервером через API или что-то еще. Файлы JSON имеют довольно простую структуру, т. е. содержат массивы и объекты. В типичном файле JSON вы найдете пары ключ-значение, которые хранят данные внутри различных объектов, хранящихся в массиве. Доступ к данным можно получить, указав индекс вместе с ключом значения.
Преобразование JSON в Excel
Как оказалось, структура файла JSON, хотя и является базовой для программиста или разработчика, обычному пользователю может быть утомительной для чтения. К счастью, в таком сценарии вы можете легко преобразовать файл JSON в лист Microsoft Excel, по которому может легко перемещаться и обычный пользователь. Это связано с тем, что листы Excel обеспечивают лучшую читаемость, а если у вас есть большой файл JSON, преобразование его в лист Excel может быть подходящим способом, если вы хотите быстрее переварить данные внутри.
Чтобы преобразовать файл JSON в лист Excel, вы можете использовать функцию «Получить и преобразовать» Microsoft Excel. В более старых версиях Microsoft Excel это может называться Power Query. Как оказалось, помимо ручного преобразования файла JSON в Excel, вы также можете использовать онлайн-инструмент, который сделает эту работу за вас. С учетом сказанного давайте начнем и покажем вам, как довольно легко преобразовать JSON в Excel.
Преобразование файла JSON в рабочий лист Excel довольно просто, и процесс довольно прост. Вы начинаете с импорта нужного файла JSON в Microsoft Excel. После импорта файла различные функции приложения Excel используются для преобразования данных внутри файла JSON в таблицу. Как оказалось, Excel поставляется с множеством различных функций, которые позволяют вам манипулировать данными, которые у вас есть внутри файла Excel. Кроме того, вы можете защитить свои данные, защитив файлы Excel паролем.
После преобразования данных в формат таблицы вы можете выбрать, какие данные вас интересуют. Это позволит вам фильтровать данные внутри файла JSON и перечислять только те значения в столбцах, которые необходимы. Все это делается в окне редактора Power Query. Следуйте инструкциям, приведенным ниже, чтобы сделать все это:
- Прежде всего, откройте файл Excel на своем компьютере.
- Открыв файл Excel, щелкните параметр «Данные» на ленте меню.Опция данных в ленте меню
- После этого под лентой меню щелкните раскрывающееся меню «Получить данные», расположенное в самом левом углу.Параметр получения данных Excel
- В раскрывающемся меню выберите параметр «Из файла» > «Из JSON».Загрузка файла JSON в Excel
- В появившемся окне «Импорт данных» перейдите туда, где хранится файл JSON, и откройте его. Это позволит импортировать файл JSON на лист Microsoft Excel.
- После импорта файла JSON откроется окно редактора Power Query.Редактор Power Query
- В левом верхнем углу нажмите на предоставленную опцию «К таблице».К столу
- В следующем диалоговом окне оставьте параметры по умолчанию и нажмите кнопку ОК.Преобразование в формат таблицы
- После этого данные были преобразованы в таблицу. Тем не менее, вы по-прежнему не можете видеть данные.
- Чтобы увидеть данные, вам придется развернуть значки. Для этого щелкните предоставленный значок «Развернуть столбец» (с двойными стрелками, направленными друг от друга).Щелчок по значку расширения столбца
- В появившемся диалоговом окне выберите столбцы, которые вы хотите видеть, и снимите флажки с тех, которые вы хотите исключить. Сделав это, нажмите кнопку ОК.Выбор столбцов для отображения
- Наконец, вы должны увидеть данные, перечисленные в отдельных столбцах.
- Для вашего удобства вы можете перемещать различные столбцы на листе. Для этого щелкните правой кнопкой мыши заголовок столбца и в раскрывающемся меню выберите параметр «Переместить».Перемещение столбца
- Оттуда вы можете переместить столбец влево, вправо, в начало или в конец.
- Когда вы будете удовлетворены компоновкой листа Excel, щелкните предоставленную опцию «Закрыть и загрузить».Закрыть и загрузить вариант
- Когда вы это сделаете, данные будут импортированы на ваш лист Excel из редактора Power Query, и вы сможете просмотреть таблицу.Преобразование JSON в Excel
- Сделав это, вы успешно преобразовали файл JSON в рабочий лист Excel.
Конвертируйте файл JSON с помощью онлайн-инструмента
Наконец, как оказалось, в дополнение к руководству, о котором мы упоминали выше, вы также можете избавить себя от всех проблем с преобразованием файла JSON вручную и вместо этого выбрать онлайн-инструмент. Использование онлайн-инструмента может быть намного проще и быстрее, так как вам нужно всего лишь загрузить файл JSON, который вы хотите преобразовать в рабочий лист Excel. Есть несколько веб-сайтов, которые предлагают эту функцию, и вы можете легко найти их с помощью одного веб-поиска. Итак, если вам не хочется решать все проблемы с преобразованием файла JSON вручную, у вас всегда есть возможность воспользоваться онлайн-инструментом, который сделает работу за вас намного быстрее.
Bookmark this app
Press Ctrl + D to add this page to your favorites or Esc to cancel the action.
Send the download link to
Send us your feedback
Oops! An error has occurred.
Invalid file, please ensure that uploading correct file
Error has been reported successfully.
You have successfully reported the error, You will get the notification email when error is fixed.
Click this link to visit the forums.
Immediately delete the uploaded & processed files.
Are you sure to delete the files?
Enter Url
JSON, short for JavaScript Object Notation, is an open standard file format (text-based) that is used for storing and transporting data. It is commonly used for transmitting data from a server to a web page (e.g., transmitting data from the server to the client, so it can be viewed on a web page, or vice versa).
JSON is a data transfer format that comes as a plain text file (like XML). If you have some important data stored in a JSON file that you would like to import into an Excel spreadsheet, you can easily do that with Excel’s ‘Get & Transform’ feature and you don’t even need any VBA code to import data from the local disk or from a web API. Let’s see how to convert/import a JSON file to an Excel file.
How to Import JSON File into Excel
JSON is represented in a logical, easy-to-read universal data structure. It is made up of only two data types – objects or arrays, or a combination of both. Objects are key-value pairs with a colon between them and arrays are simply collections of objects separated by a comma.
You can easily convert JSON files to Excel files (.xlsx) using Excel’s ‘Get & Transform’ tool (Power Query). Initially, it was were called ‘Data Explorer’, then it was renamed to ‘Power Query’. Power Query is only available in 2010 and 2013 versions of Excel. In Microsoft Excel 2016, 2019, and 365, it was again renamed to the ‘Get & Transform’ feature on the Data tab.
This is how a JSON file will look like:
Now, we have a sample JSON file named Employees as shown above. Let’s see how we can convert this JSON file to an Excel file.
JSON Data
JSON data is written as name/value pairs. A name(key)/value pair consists of a field name (in double quotes), followed by a colon, followed by a value:
"First Name": "Dulce"
JSON Objects
JSON objects can contain multiple name/value pairs (just like in JavaScript) and they are written inside curly braces as shown below.
{
"First Name": "Dulce",
"Last Name": "Abril",
"Gender": "Female",
"Country": "United States",
"Age": "32",
"Date": "15/10/2017",
"Id": "1562"
}
JSON Arrays
JSON arrays are written inside square brackets ( [ ] ) and it is a collection of objects.
Importing JSON File into Excel
In the example above, the JSON array contains numerous objects. And each object is a record of an employee (with First Name, Last Name, Gender, Country, Age, Date, and Id). In this tutorial, we will use ‘Excel 2016’ to demonstrate the data import.
First, open the Microsoft Excel and switch to the ‘Data’ tab and click the ‘Get Data’ button in the ‘Get and Transform Data’ group at the leftmost corner of the ribbon. From the drop-down expand the ‘From File’ and select the ‘From JSON’ option.
When you click the ‘From JSON’, you will get a file browser window. Find the JSON file on your local disk and click ‘Import’.
If you want to import data from a web API (Web Application Programming Interface), you may want to import the data directly from the internet. To do this, instead of clicking the ‘From JSON’ option, go to Data tab > Get Data > From Other Source > ‘From Web’ and enter the web URL.
When you click ‘Import’ button as shown in the above screenshot, it will bring you into the Excel Power Query Editor. You will notice all the records that were in that list broken into rows. But we can’t see the actual data. To convert this list to a table, click the ‘To Table’ option.
A To Table dialog box will appear. In the dialog, keep the defaults and select ‘OK’.
Now your data is in a table format, but you still can’t see the record details. To expand the columns, click the ‘Expand Column’ button (icon with two arrows pointing away from one another).
You will see the columns that are listed in the records. Select the columns that you like to include in the table and click ‘OK’. Uncheck the columns that you’d like to be excluded.
The data will then be broken out into separate columns as shown below.
You can also move the columns around as you see fit. To do this, right-click on a column header, select ‘Move’, and choose where want to move it.
Once you are satisfied with the layout, click the ‘Close and Load’ button under the ‘Home’ tab to load data into Excel as a Table.
The data will now be imported into a new worksheet in Excel.
Convert JSON File into Excel File Online
If you want quickly convert JSON files to Excel files (.xslx), use one of the many third-party websites available online. They can convert your files in a matter of seconds, but they are not always reliable. Simply type ‘convert JSON to Excel’ in a search engine and you’ll get plenty of websites you can use.
One of the websites you can use to convert JSON to XSLX is json-csv.com. Open the website and click the ‘Upload JSON file’ button to upload the JSON from your local disk. Find the JSON file on your disk and click ‘Open’.
Once you upload the file, you’ll get a preview of your table below. Then, click the ‘Excel File (XLSX)’ button to download your converted Excel file.
That’s it! That’s how you import a .json File in Excel.