Easily Convert JSON to Excel – Step by Step Tutorial

Share

Facebook
Twitter
LinkedIn
Convert JSON to Excel

JSON (JaveScript Object Notation) is a popular and easy format to store, share and distribute data. It is often used by websites, APIs and streaming (real-time) systems. But it is also cumbersome and hard to use for performing typical data tasks like summarizing, pivoting, filtering or visualizing. That is why you may want to convert JSON to Excel format. In this article let me explain the process.

1. Why Convert JSON to Excel?

Excel is a more familiar and easy to work with format for your data. Also, when setup properly Excel files (such as CSV or XLSX or XLSB) take up less space than their JSON counter parts. More importantly, performing data tasks like calculating formulas, creating pivots or making charts would be easier with Excel format as against JSON.

Overview of This Guide

In this guide, we’ll walk through multiple methods to convert JSON to Excel, including manual methods using Excel’s built-in tools, automated methods using Python, and third-party online tools. Whether you’re working with small or large datasets, there’s a solution for you. Let’s dive in and explore how you can make this transformation efficiently.


2. Understanding JSON Format

Before jumping into the process of converting JSON to Excel, it’s important to understand JSON format. JSON is a lightweight data format that’s easy for both us and computers to read and write. It’s primarily used to transmit data between a server and a web application, often in APIs or data feeds.

What Does JSON Look Like?

At its core, JSON is a collection of key-value pairs that are organized in objects and arrays. JSON data can be quite flexible, allowing it to represent both simple and complex data structures. It supports various types of data, including strings, numbers, booleans, arrays, and objects.

Let’s consider the following example of JSON data representing information about a few employees in a company:

{
  "employees": [
    {
      "id": 1,
      "first_name": "John",
      "last_name": "Doe",
      "email": "johndoe@awesomechoc.com",
      "position": "Chocolatier",
      "hire_date": "2023-06-15",
      "skills": ["Baking", "Cocoa Sculpting", "Confectionary"]
    },
    {
      "id": 2,
      "first_name": "Jane",
      "last_name": "Smith",
      "email": "janesmith@awesomechoc.com",
      "position": "Marketer",
      "hire_date": "2024-02-20",
      "skills": ["Packaging", "Product Design", "Field Sales"]
    },
    {
      "id": 3,
      "first_name": "Emily",
      "last_name": "Johnson",
      "email": "emilyj@awesomechoc.com",
      "position": "Accountant",
      "hire_date": "2024-08-30",
      "skills": ["XERO", "Excel", "AR / AP consolidation"]
    }
  ]
}

Breaking Down the JSON Example

  1. Objects and Arrays:
    • The main JSON data structure in the example above is an object, denoted by curly braces {}.
    • Inside this object, there is a key called "employees", which maps to an array (denoted by square brackets []).
    • The array (list) contains multiple objects, each representing a single employee.
  2. Key-Value Pairs:
    • Inside each employee object, you’ll find several key-value pairs. For example, "id": 1 tells you the employee’s ID, and "first_name": "John" specifies the first name of the employee.
    • Some of the values in the JSON are simple data types (like strings or numbers), while others, such as the skills key, are arrays that hold multiple values.
  3. Nested Data:
    • The skills field is an example of nested data. It’s an array within the employee object, which further contains multiple string values representing different skills. This kind of nested data can be difficult to work with directly in Excel, which is why conversion and flattening are necessary.

Challenges of Working with JSON in Excel

JSON is like a tree but Excel tables are flat like bamboo

As you can see, JSON is hierarchical while Excel prefers data in a flattened, tabular format.

If you try to import JSON directly into Excel without transforming it, you might end up with a jumbled mess of data.

For example, in the above JSON, the "skills" field would result in a list being placed into a single cell if not properly flattened. Additionally, nested objects, like the employee object, would need to be expanded into separate columns (e.g., "id", "first_name", "last_name") for the data to be usable.

This is why it’s essential to convert JSON to Excel in a way that ensures all data is properly structured in rows and columns for analysis. Let’s explore some methods to accomplish that.

3. Methods for converting JSON to Excel format

There are many ways to convert JSON to Excel. My preferred technique is to use Power Query in Excel to convert the data quickly and elegantly. But you can also use other techniques. Let’s go thru each of these in detail.

JSON to Excel conversion (step by step):

What you need: You need a JSON file with your data. Download this sample data if you don’t have any.

  1. Go to Data > Get Data > From File > From JSON
  2. Select the JSON file on your computer (or on the network location)
  3. This will open Power Query editor with your JSON file. Here is a snapshot of how that would look like:
JSON file after loading in to Power Query
  1. Using the “convert” ribbon, convert the JSON listing to a “table”.
  2. Now you will have a “list” of all the JSON records (or objects). Click on the Expand button on the list column and select “expand to new rows”.
  3. This should show all the records of the JSON (see below)
Before and after expanding
  1. Expand the Value column again to see the contents of the records.
  2. If you have any “nested” or “hierarchical” data in your JSON, you must expand these columns again. But this time, use the “extract values…” option so you can see them all comma separated in the same column.
  3. Once you have all the necessary data in Power Query, remove any columns you no longer need by right clicking on them and selecting “remove” option.
  4. When ready, use the Home ribbon > Close & Load to bring the data to Excel.
How to load parsed JSON data into Excel

Quick Demo of JSON to Excel conversion:

Here is a quick video demo of the process in Power Query.

Things to keep in mind when converting JSON to Excel with Power Query ??:

  • Nested Data: If your JSON has nested data elements (for ex: skills attribute in our example above), you need to recursively expand all these items. But don’t expand them to “new rows” as this will create duplicate data. Instead just use “extract” option and get them all in one column with a delimiter like comma or semi-colon.
  • Data type conversion: By default Power Query may convert your data to relevant data types. But always double check this and apply any conversion necessary.
  • Preview vs. Load: Power Query Editor shows a preview of the JSON file for first 1000 rows, but actual conversion will only happen when you click on “close and load” button in Excel. So don’t freak out if you don’t see all the data in PQE (PQ Editor). It should appear when you load data to Excel.
  • 1 Million Row Limitation: Excel spreadsheets can only hold 1,048,576 rows (just over 1 million). So if your JSON is really big, you need to think of another method. Here is an example of how to use Excel if you have more than 1 million rows of data.

Pros & Cons of using Excel to convert JSON:

Pros:

  • Quick and easy: Power Query in Excel offers a quick, easy and straightforward way to convert JSON to Excel.
  • FREE: Excel based conversion is free unlike paid methods.
  • Refreshable: Should your JSON files change or update, you can quickly refresh the Power Query connection to see updated data in Excel. This means any reports or calculations you build on top of the JSON will automatically update, thus providing up to date information.

Cons:

  • Hard to work with deeply nested data: If your JSON has multiple levels of nesting or hierarchies, then the Power Query based approach requires “drilling” to all these levels. As data can change often, if a new level of nesting appears in future, your Power Query refresh can fail.
  • Requires understanding of Power Query: While PQ is not deeply technical, it is not easy either. So if you are not familiar with PQ, you will find this method hard to use. Here is an excellent beginner tutorial on Power Query with 4 powerful examples.

JSON to Excel conversion with Python (step by step):

Why Use Python for JSON to Excel Conversion?

While Excel’s Power Query can handle basic JSON imports, Python is often the better choice when dealing with large datasets, deeply nested JSON structures, or automating repetitive tasks. Using Python, we can efficiently read, manipulate, and export JSON data to an Excel file in just a few lines of code.

Installing Necessary Python Libraries

To begin, install the required libraries:

pip install pandas openpyxl

These libraries will help us process the JSON data and save it in an Excel-friendly format.

Loading JSON Data in Python

Consider the following employee data stored in JSON format (sample file).

{
  "employees": [
    {
      "id": 1,
      "first_name": "John",
      "last_name": "Doe",
      "email": "johndoe@awesomechoc.com",
      "position": "Chocolatier",
      "hire_date": "2023-06-15",
      "skills": ["Baking", "Cocoa Sculpting", "Confectionary"]
    },
    {
      "id": 2,
      "first_name": "Jane",
      "last_name": "Smith",
      "email": "janesmith@awesomechoc.com",
      "position": "Marketer",
      "hire_date": "2024-02-20",
      "skills": ["Packaging", "Product Design", "Field Sales"]
    }
  ]
}

We can load this JSON file into Python using:

import json
import pandas as pd

# Load JSON data from a file
with open("employees.json", "r") as file:
    data = json.load(file)

Converting JSON to a Pandas DataFrame

Since the JSON structure contains a list under the "employees" key, we extract and convert it to a DataFrame:

df = pd.DataFrame(data["employees"])

This will transform the data into a tabular format, making it easier to analyze and manipulate.

Exporting Data to an Excel File

To save the structured data as an Excel file:

df.to_excel("employees.xlsx", index=False, engine='openpyxl')

This creates an Excel file employees.xlsx, which can be opened in Excel for further processing.

Handling Nested JSON Data

If the skills field is stored as a list, Excel might not display it properly. We can flatten this field:

df["skills"] = df["skills"].apply(lambda x: ", ".join(x) if isinstance(x, list) else x)

Now, each employee’s skills will be stored as a comma-separated string, making it easier to read.

Automating JSON to Excel Conversion

For repeated tasks, we can automate the conversion by scheduling this Python script to run daily or whenever a new JSON file is added.

Python provides a scalable and efficient way to process JSON data and export it to Excel, making it ideal for large datasets and automation needs.

Converting JSON to Excel with External Tools

If you don’t want to get your hands dirty with Power Query or Python based approaches, you can also use online tools to quickly convert JSON to Excel format.

1. Online JSON to Excel Converters

These web-based tools allow users to upload a JSON file and instantly download an Excel file:

These tools are great for quick, one-time conversions, but they may have file size limitations and require manual steps each time.

2. Using Power BI to convert JSON to Excel

If you prefer to use a desktop software to convert JSON to Excel formats (like CSV or tables), you can use Power BI Desktop too. This doesn’t have 1 million row limitation so you ca use it to parse very large JSON files. The approach is same Excel Power Query technique, but the final data ends up in Power BI. You can either copy the table at the end of load process or use it directly inside Power BI to analyze the data.

Final Thoughts

If your JSON files are simple enough, just use Power Query in Excel to get the output the way you want. You can refresh this anytime your data changes.

On the other hand if your files are large or you need more control, use Python code samples above and tweak them to your needs.

If you have any questions, leave a comment so I can help you.

Facebook
Twitter
LinkedIn

Share this tip with your colleagues

Excel and Power BI tips - Chandoo.org Newsletter

Get FREE Excel + Power BI Tips

Simple, fun and useful emails, once per week.

Learn & be awesome.

Welcome to Chandoo.org

Thank you so much for visiting. My aim is to make you awesome in Excel & Power BI. I do this by sharing videos, tips, examples and downloads on this website. There are more than 1,000 pages with all things Excel, Power BI, Dashboards & VBA here. Go ahead and spend few minutes to be AWESOME.

Read my storyFREE Excel tips book

Overall I learned a lot and I thought you did a great job of explaining how to do things. This will definitely elevate my reporting in the future.
Rebekah S
Reporting Analyst
Excel formula list - 100+ examples and howto guide for you

From simple to complex, there is a formula for every occasion. Check out the list now.

Calendars, invoices, trackers and much more. All free, fun and fantastic.

Advanced Pivot Table tricks

Power Query, Data model, DAX, Filters, Slicers, Conditional formats and beautiful charts. It's all here.

Still on fence about Power BI? In this getting started guide, learn what is Power BI, how to get it and how to create your first report from scratch.

15 Responses to “Compare 2 Lists Visually and Highlight Matches”

  1. Nunes says:

    Hi,
    I solved this in a little different way.

    We have 2 lists, one starts at A1 and other at B1, both are vertical arrays.

    First thing is define 2 named ranges, list1 and list2:
    list1 refers to "=OFFSET(Sheet1!$A$1;0;0;SUMPRODUCT(--(Sheet1!$A$1:$A$1000""));1)"
    list2 refers to "=OFFSET(Sheet1!$A$1;0;0;SUMPRODUCT(--(Sheet1!$B$1:$B$1000""));1)"

    this way lists will be dynamically sized when you had or remove elements (you can't have blanks and you can't have more than 1000 elements).

    Then I use conditional formatting in column A when this formula is true:
    "=NOT(ISERROR(MATCH(A1;list2;0)))"
    and "=NOT(ISERROR(MATCH(B1;list1;0)))" to list2.

    This way we eliminate the need for auxiliary columns or lists.

    Hope you like my way! 😀

    Nunes

  2. glw says:

    Simple conditional formatting formula.
    Assuming lists vertical lists starting in A1 & B1
    To highlight just one column (assume B for example)
    Conditional formatting>New Rule>by formula
    =MATCH(B1,$A$1:$A$99,0)
    Set the cell fill to what ever color you prefer & press OK

    To highlight both columns repeat with this formula for cell in column A
    =MATCH(A1,$B$1:$B$99,0)

    This approach doesn't require named fields or addtl columns
    glw

  3. Alan says:

    Say I had 1 list in A2:A20 and another in B2:B20.

    To format all the items in column A that are repeated in column B I would use the following Conditional Formatting rule.

    =IF(ISNA(VLOOKUP(A2,$B$2:$B$20,1,false)),true,false)

    All the duplicates are highlighted. It us a very simple example of comparison.

  4. Lee says:

    I may be missing something here, but I usually highlight both my lists by holding ctrl eg A1:A20 E10:E40 then choose conditional formatting from the ribbon and then highlight duplicates, and this does it?

  5. Greg says:

    Lee, I was perplexed as well. I do the same thing you do with the conditional formating. A drag and click to highlight range and choose highlight duplicates does the trick for me.

  6. Alan says:

    I believe these methods are to check if an item from one list also appears in the other list. So if an item mentioned many times in one list if also mentioned in the other list or not.

    The Conditional Formatting highlight duplicates feature will do this, but it will also highlight an item if it appears multiple times in the one column or list.

  7. i48998 says:

    Hi, I would just like to know (if you are willing to share) which image editing program you use to make your image like above, like they are torn apart from bottom? I've been looking for long.

  8. Hui... says:

    @i48998
    Chandoo is on Holidays, but Chandoo uses Paint.Net
    Paint.net is a free download available at http://www.paint.net/
    .
    I use CorelDraw/PhotoPaint
    .
    We both use the Snipping Tool (a freebe with Win Vista/10)
    .
    We both use Camtasia for doing screen captures to make animated GIFs where you see animation.

  9. Rick says:

    Here is how I would accomplish
    (1) Define Names: List_1, List_2
    (2) =ISNA(MATCH(D4,List_2,0))-1 (Conditional Format formula List_1)
    (3) =ISNA(MATCH(D4,List_1,0))-1 (Conditional Format formula List_2)

    ISNA will return 1 if NO Match and O if Match by adding a -1 will make: NO Match 0 and Match a -1 which is True

  10. Hi all
    this my first Post here
    i think we can take Unique List for tow list to know what is not Duplicate By this Array formula
    =IFERROR(INDEX($D$6:$D$33,SMALL(IF(ISERROR(MATCH($D$6:$D$33,$B$6:$B$33,0)),ROW($D$6:$D$33)-ROW($D$6)+1),ROWS($J$5:J5))),"")
    and this one for Duplicate Value
    =IFERROR(INDEX($D$6:$D$33,SMALL(IF(ISNUMBER(MATCH($D$6:$D$33,$B$6:$B$33,0)),ROW($D$6:$D$33)-ROW($D$6)+1),ROWS($J$5:J5))),"")

    Don't forget to Enter This Formula by Pressing Ctrl+Shift+Enter

  11. Excel Addin says:

    without wanting to ruthlessly self promote here, I do have an addin that does neatly compare two ranges, not just in columns, so you might want to check that out.

    Having said that this is a pretty neat solution if you dont want to be going down the VBA or purchase route. I like it

    however, could you not do something with the remove duplicates feature in Excel 2010 and then compare the resulting data set?

  12. SirJB7 says:

    Hi, Chandoo! I've found yesterday your Excel website... What can I say? It's just awesome, Excellent. Being a developer for 30 years, more than 15 with Office products, and wow!, how many things I discovered in a couple of hours, and what pretty resolved.
    I decided to take the long path of the newbies and read all your examples and write down by myself all of them, and when I arrived to this (the comparison of two lists) I think I've found a problem:
    a) in "Step 4: Apply conditional formatting to Second List - Use the same logic, but this time the rule becomes =COUNTIF(count1s,$H6)" it should say "Step 4: Apply conditional formatting to Second List - Use the same logic, but this time the rule becomes =COUNTIF(count1s,$H6)>0", but this is a typing error that I believe all of us here might have discovered and corrected
    b) the very problem: I wrote down two different lists, in different ranges, and with different number of elements, I specified the equivalent conditional formats, et non voilá!, I didn't get what expected. So I downloaded your example book, I checked range names, formulaes, conditional formats and all OK. So I copied -just values- from my book to yours, and I still couldn't achieve the goal.
    I'm using Excel 2010 in spanish, I'm from Buenos Aires (Argentina), and my book is at your disposition whenever you considerate it appropiate.
    Thanks in advance for your time, and again my congratulations for your work here.
    Best regards.
    SirJB7

  13. SirJB7 says:

    Comparison of 2 lists visually with highlights
    Author: SirJB7 / Date: 11-Dic-2011
    Pros: no duplicated tables, no matrix formulaes, no named ranges, no VBA code, just conditional formatting
    Cons: not found yet, comments and observations welcome
    Features:
    a) standard problem: highlights in orange/yellow elements existing in the other list
    b) optimized problem: idem a) plus highlights in red/violet first occurrence of elements existing in the other list
    Sheet contents:
    a) conditional format, 1 rule per list (2 methods used)
    A1:A20, first list
    B1:B20, second list
    a1) range A1:A20, condition =NO(ESERROR(BUSCARV(A1;B$1:B$20;1;FALSO))), format Orange ---> in english: =NOT(ISERROR(VLOOKUP(A1,B$1:B$20,1,FALSE)))
    a2) range B1:B20, condition =CONTAR.SI(A$1:A$20;B1)>0, format Yellow ---> in english: =COUNTIF(A$1:A$20,B1)>0
    b) conditional format, 2 rules per list (2 methods used)
    D1:D20, first list
    E1:E20, second list
    b1) range E1:E20, condition 1 =Y(NO(ESERROR(BUSCARV(D1;E$1:E$20;1;FALSO)));COINCIDIR(D1;D$1:D$20;0)=FILA(D1)), format Red ---> in english: =AND(NOT(ISERROR(VLOOKUP(D1,E$1:E$20,1,FALSE))),MATCH(D1,D$1:D$20,0)=ROW(D1))
    same range, condition 2 and format 2, same as a1)
    b2) range E1:E20, condition =Y(CONTAR.SI(D$1:D$20;E1)>0;COINCIDIR(E1;E$1:E$20;0)=FILA(E1)), format Violet ---> in english: =AND(COUNTIF(D$1:D$20,E1)>0,MATCH(E1,E$1:E$20,0)=ROW(E1))
    same range, condition 2 and format 2, same as a2)
    Personally I like the a2) and b2) solutions, I think the formulaes are prettier.
    I still don't know the rules of this website and forum, but it any precept is infringed I'm willing to share the workbook with the solution. If it breaks a rule, I apologize and promise that won't happen again.
    Best regards for all!

  14. sunil says:

    Dear All i have a complicated situation...

    1. I have two sheets of data Sheet1 and Sheet2 (from various sources) - Both of these contain data matching and Not matching as well..

    2. Now for me i need to build an excel where in i need to get sheet 3 with values that are present in a column of Sheet 1.

    What ever Sheet 1 doesn't have i dont want those rows from sheet 2 to be populated into Sheet3.

    Can any one help me out.

  15. Jagdev says:

    Hi Team

    The above example is to compare partial name from 2 different columns.

    If I want to cross check it in a single column. I have both correct and partial correct/match entries in a column. Is there any way I can find both the entries in the column.

    Regards

Leave a Reply