Writing JSON

Liz Sanderson
Liz Sanderson
  • Updated

Introduction

FME offers several ways to write JSON data. This table provides an overview of methods and their common use-cases.

Method Common Scenario Tutorial
JSON Writer Writing simple, unnested JSON This page
JSONTemplater + Text File Writer Writing nested JSON Writing JSON with the JSONTemplater
FeatureWriter Writing JSON in the middle of a translation The FeatureWriter Transformer
HTTPCaller Sending a JSON message via an HTTP POST request Tutorial: Getting Started with APIs
GeoJSON Writer You want the destination JSON data to follow the GeoJSON specification GeoJSON Reader/Writer Documentation
Esri JSON Writer You want the destination JSON data to follow the Esri JSON specification Esri-JSON Reader/Writer Documentation
IMDF Writer You want the destination JSON data to follow the IMDF GeoJSON specification IMDF Reader/Writer Documentation

This article shows a simple example of writing using the JSON writer. The JSON writer provides a quick, easy way to convert data to JSON format. However, it is only suited to writing flat JSON without nesting. If you want to write nested JSON, you can use the JSONTemplater with a Text File writer. That workflow is covered in the next tutorial.

Step-by-step Instructions

Part 1: Writing JSON

1. Start FME Workbench and Generate Workspace

Start FME Workbench and click Generate Workspace. For Reader Format, select Microsoft Excel. The dataset is PublicArt.xlsx, available for download from the Files section of this article.

Click the Parameters button to preview the Excel data. You’ll see that the Excel Workbook comprises six sheets, each representing a neighborhood in Vancouver. 

sheets-to-read.png

Click Cancel, as we don’t need to modify our reader parameters.

For Writer Format, select JSON (JavaScript Object Notation). For the Dataset, create a local JSON file named PublicArt.json wherever you wish.

Click the writer Parameters button. By default, when writing to JSON, each FME feature becomes a JSON array element, with its attributes nested under it. The FME feature type is included as the json_featuretype attribute. By default, Write Geometry is checked, allowing you to include FME geometry in the destination JSON file in several formats.

For this article, we will be writing each public art installation as an element in the JSON array, but we want to include the neighborhood as an attribute. Because each sheet in the source Excel file corresponds to a neighborhood, we can simply rename the default json_featuretype attribute to Neighborhood.

Uncheck Write Geometry, because we don’t want to include geometry in our simple JSON output.

We can leave the remaining writer parameters at their defaults. The writer parameters dialog should look like this:

JSONWriterParams.png

Click OK.

The Generate Workspace dialog should look like this:

GenerateWorkspaceJSONWriting.png

workspace.png

2. Run the Workspace

Click the Run button to run the workspace. Once the workspace has run successfully, click the Downtown feature type to select it. Then click the Inspect Written Data button to open the output dataset in Data Preview:

view-written-data.png

You should see the Downtown feature type displayed in Table View, with all its original attributes. You can verify that the feature type attribute Neighborhood is used to split the data into feature types by opening the Display Control window and checking that each neighborhood is a feature type in the JSON file.

visual-preview.png

3. Inspect the Result

If you inspect the JSON file in a text editor like Notepad++, you’ll notice that each feature has a Neighborhood attribute:

[
    {
        "Neighborhood" : "Downtown",
        "Name" : "Harbour Centre Parkade",
        "Title" : "The Belonging Action",
        "Longitude" : -123.110097741722,
        "Latitude" : 49.2837806793832
    },
…
]

However, you’ll also notice that this is not a very efficient way to organize a JSON file, as it does not take advantage of JSON’s nested structure at all. It could be structured with Neighborhood as the top-level of the hierarchy, with each art installation underneath the relevant neighborhood, e.g.:

{
    "Downtown": [{
            "Name": "Harbour Centre Parkade",
            "Title": "The Belonging Action",
            "Longitude": -123.110097741722,
            "Latitude": 49.2837806793832
        },
        {
            "Name": "Chinese Cultural Centre",
            "Title": "China Gate",
            "Longitude": -123.103282272368,
            "Latitude": 49.2797561341325
        },
        ...
    ],
    "Strathcona": [{
            "Name": "National  Works Yard",
            "Title": "Roller",
            "Longitude": -123.092675,
            "Latitude": 49.2736209999959
        },
        {
            "Name": "Jim Green Residence",
            "Title": "Entranceway",
            "Longitude": -123.095131,
            "Latitude": 49.2842699999959
        },
        ...
    ],
    ...
}

This point illustrates that FME’s JSON writer is best used for cases where nesting is not required. For cases where you wish to nest the JSON data, refer to the Writing JSON with the JSONTemplater and the JSONTemplater transformer.

Part 2: Writing GeoJSON

In part 1, you learned how to write JSON. In part 2, we'll write data to GeoJSON. We're going to use the same workspace to create a GeoJSON dataset. GeoJSON is a JSON specification for encoding geometry in geographic data.

1. Open Workspace

Continue with the workspace from Part 1 or open writing-json.fmw

2. Add GeoJSON Writer

Navigate to the Writers drop-down menu above the toolbar and select Add Writer.

AddWriter.png

An Add Writer dialog will appear; change the format to GeoJSON (Geographic JavaScript Object Notation). Select a destination location. Ensure the Feature Type Definition is set to Copy from Reader. Click OK.

WriterParameters.png

After clicking OK, a Select Feature Types dialog will appear. Select All and click OK.​​​​​​​

featureTypes.png

3. Connect the Reader and Writer Feature Types

Six new writer feature types will be added to the canvas. Connect the new writer feature types to the corresponding reader. As a keyboard shortcut, you can hold the Shift key, then click. 

Connections.png

4. Consider the File Structure Parameter

If you have more than one feature type, you might want to consider changing the File Structure Parameter. This parameter controls the structure of the GeoJSON file produced by the writer. This parameter can be accessed from the Navigator window by double-clicking on the GeoJSON writer destination. You can find the options explained in the GeoJSON Writer documentation.

FileStructureParam.png

Run the workspace and inspect the output. Below is a screenshot of our sample output; the output may look different depending on what File Structure option was used.

GeoJSON output.png
 

Data Attribution

The data used here originates from open data made available by the City of Vancouver, British Columbia. It contains information licensed under the Open Government License - Vancouver.

Was this article helpful?

We're sorry to hear that.

Please tell us why.

As of January 14th, 2026, comments on knowledge base articles have been closed. To make sure questions don’t get missed and to enable more community support, we’ve moved discussions to the FME Community. If you have a question or a comment about this article, please create a new post or create a support ticket.