This article is also available in:

About Json List layer

JSON List


The JSON List layer connects a list of preset records, hosted as a single JSON file, so buyers pick one from a searchable dropdown instead of you building each option by hand. Add it to any artwork where you have many options that share the same fields, like a list of cities, schools, or teams.



1. What is a JSON layer


A JSON layer works similarly to an Additional Option: both let a buyer pick from a preset list. The difference is scale. With Additional Options, you build each choice one by one. With a JSON layer, you maintain one JSON file with all your presets, and every field in it (name, color, landmark, whatever you include) comes along with the buyer's selection, ready to use elsewhere in your artwork.


For a small, fixed list of choices, an Additional Option is usually simpler to set up. A JSON layer pays off once you have many options, or options with several fields each, since you manage them all in one file instead of one by one in the Portal.


Right now, a JSON layer's selected data is mainly useful in two ways:

  • Feeding a Text to Image prompt, so the buyer's pick fills in multiple prompt variables at once (city name, colors, landmark, and so on).
  • Acting as a condition for other layers, so you can show or hide a field depending on which record the buyer picked.

2. Add a JSON layer


  • On your Artwork Editor, click +Layer > under the Form Elements category, select JSON List.



A JSON List layer adds nothing visible to the canvas. It's a form field only, it doesn't draw anything on the design itself.

3. Configure the Json layer settings


  • Option Title: the label buyers see above the dropdown.
  • JSON File URL: a link to your JSON file. Must start with https://, and the file must be a JSON array of records.


Don't have a public link yet? Upload your JSON file to your Shopify Admin > Content > Files, then paste that file's link here.


  • Option display template: controls what's shown per item in the dropdown, e.g. {{name}} — {{country}}.



  • Default value: pre-selects a record by name when the buyer opens the form with nothing chosen yet. It's matched against your JSON's name field; if nothing matches, the field just starts empty.



Every record in your file needs a unique, non-empty name field. Records missing a name, or sharing a name with another record, are skipped.


Sample record (from the cities example):


{
    "id": "city_004",
    "name": "Tokyo",
    "alias": "Eastern Capital",
    "country": "Japan",
    "continent": "Asia",
    "colors": "Red and White",
    "founded": "1603",
    "nickname": "Eastern Capital",
    "landmark": "Tokyo Tower",
    "famous_food": "Sushi",
    "popular_activity": "Cherry Blossom Viewing"
}


Only name needs to be unique. Every other field is entirely up to you, you decide what fields exist in your own file, and you can pull any of those fields into your Text to Image prompt.



You can choose which fields show on the cart line using Cart display template, e.g. {{name}} — {{country}}. This requires Show customization data on cart to be turned on.


4. Structure your JSON file


Your file needs to be a JSON array, a list of records wrapped in square brackets, where each record is one selectable option.


[
  {
    "id": "city_004",
    "name": "Tokyo",
    "alias": "Eastern Capital",
    "country": "Japan",
    "continent": "Asia",
    "colors": "Red and White",
    "founded": "1603",
    "nickname": "Eastern Capital",
    "landmark": "Tokyo Tower",
    "famous_food": "Sushi",
    "popular_activity": "Cherry Blossom Viewing"
  },
  {
    "id": "city_001",
    "name": "Paris",
    "alias": "City of Light",
    "country": "France",
    "continent": "Europe",
    "colors": "Blue, White and Red",
    "founded": "3rd Century BC",
    "nickname": "City of Love",
    "landmark": "Eiffel Tower",
    "famous_food": "Croissant",
    "popular_activity": "River Seine Cruise"
  }
]


Every record needs a name field, and its value must be different from every other record's name. Records with a blank or duplicate name value are skipped, they won't show up as a pickable option.


Every other field is entirely up to you. You decide what fields exist in your own file, and every field is available to reference elsewhere in your artwork (see the Text to Image article for how to pull specific fields into a prompt).


Values that are arrays (a list of items in square brackets [ ]) aren't supported. For example, this won't work:


{
  "id": "school_005",
  "name": "University of California, Berkeley",
  "aliases": ["UC Berkeley", "Berkeley", "Cal"]
}


Neither will an array of objects:


{
  "id": "university-of-washington",
  "school_name": "University of Washington",
  "short_name": "UW",
  "colors": [
    {
      "name": "Husky Purple",
      "hex": "#32006E",
      "prompt_description": "rich deep warm collegiate purple"
    },
    {
      "name": "Husky Gold",
      "hex": "#B7A57A",
      "prompt_description": "muted warm antique collegiate gold"
    }
  ]
}


A nested object (a value in curly braces { } with its own fields) is supported, as long as it's a single object and not a list of them. If your file looks like this:


[
  {
    "id": 1,
    "username": "johndoe",
    "email": "john.doe@example.com",
    "name": {
      "first": "John",
      "last": "Doe"
    },
    "age": 32,
    "role": "admin",
    "active": true,
    "created": "2023-01-15"
  },
  {
    "id": 2,
    "username": "janesmith",
    "email": "jane.smith@example.com",
    "name": {
      "first": "Jane",
      "last": "Smith"
    },
    "age": 28,
    "role": "editor",
    "active": true,
    "created": "2023-02-20"
  }
]


You can target a field inside the nested name object by chaining another dot: {{Option Title.name.first}} pulls in "John" for the first record.


We have prepared a demo json file for you to use as a starting point.

5. Known limitations


  • A JSON List layer can be duplicated normally, but it can't be Duplicate & Linked to another artwork. Use regular duplication instead.
  • JSON List doesn't currently support Global Options, you can't define one JSON List once and reuse it across multiple products the way you can with other layer types.
  • The file must load within 15 seconds and must be a valid JSON array, otherwise the dropdown shows an error with a Retry button for the buyer.
  • Field values must be strings, numbers, booleans, or a single nested object, arrays aren't supported.

Updated on: 07/09/2026

Was this article helpful?

Share your feedback

Cancel

Thank you!