Importing data from JSON

On this page

Still need help?

The Atlassian Community is here for you.

Ask the community

The JSON import feature allows you to import issues from external issue trackers that cannot be exported to CSV files. Please note that the import format used by the Jira Importers plugin is more basic than the import format available when using the Jira REST API.

Creating a JSON file for Import

If your current issue tracking system is unable to export in the JSON format, you may wish to create the file manually. To prepare the JSON file, you should use the standard JSON format, and follow the pattern detailed below.

JSON File Example
{
    "users": [
        {
            "name": "abcde-12345-fedcba",
        },
        {
            "name": "edcba-12345-abcdef",
        }
    ],
    "links": [
        {
            "name": "sub-task-link",
            "sourceId": "2",
            "destinationId": "1"
        },
        {
            "name": "Duplicate",
            "sourceId": "3",
            "destinationId": "2"
        }
    ],
    "projects": [
        {
            "name": "A Sample Project",
            "key": "ASM",
            "description": "JSON file description",
            "versions": [
                {
                    "name": "1.0",
                    "released": true,
                    "releaseDate": "2012-08-31T15:59:02.161+0100"
                },
                {
                    "name": "2.0"
                }
            ],
            "components": [
                "Component",
                "AnotherComponent"
            ],
            "issues": [
                {
                    "priority" : "Major",
                    "description" : "Some nice description here\nMaybe _italics_ or *bold*?",
                    "status" : "Closed",
                    "reporter" : ""abcde-12345-fedcba",
                    "labels" : [ "impossible", "to", "test" ],
                    "watchers" : [ "abcde-12345-fedcba" ],
                    "issueType" : "Bug",
                    "resolution" : "Resolved",
                    "created" : "2012-08-31T17:59:02.161+0100",
                    "updated" : "P-1D",
                    "affectedVersions" : [ "1.0" ],
                    "summary" : "My chore for today",
                    "assignee" : "abcde-12345-fedcba",
                    "fixedVersions" : [ "1.0", "2.0" ],
                    "components" : ["Component", "AnotherComponent"],
                    "externalId" : "1",
                    "history" : [
                        {
                            "author" : "abcde-12345-fedcba",
                            "created": "2012-08-31T15:59:02.161+0100",
                            "items": [
                                {
                                    "fieldType" : "jira",
                                    "field" : "status",
                                    "from" : "1",
                                    "fromString" : "Open",
                                    "to" : "5",
                                    "toString" : "Resolved"
                                }
                            ]
                        }
                    ],
                    "customFieldValues": [
                        {
                            "fieldName": "Story Points",
                            "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:float",
                            "value": "15"
                        },
                        {
                            "fieldName": "Business Value",
                            "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:float",
                            "value": "34"
                        }
                    ],
                    "attachments" : [
                        {
                            "name" : "battarang.jpg",
                            "attacher" : "bob@example.com", 
                            "created" : "2012-08-31T17:59:02.161+0100",
                            "uri" : "http://optimus-prime/~batman/images/battarang.jpg",
							"description" : "This is optimus prime"
                        }
                    ]                    
                },
                {
                    "status" : "Open",
                    "reporter" : "abcde-12345-fedcba",
                    "issueType": "Sub-task",
                    "created" : "P-3D",
                    "updated" : "P-1D",
                    "summary" : "Sub-task",
                    "externalId": "2"
                },
                {
                    "status" : "Closed",
                    "reporter" : "abcde-12345-fedcba",
                    "issueType": "Sub-task",
                    "created" : "P-3D",
                    "updated" : "P-1D",
                    "resolution" : "Duplicate",
                    "summary" : "Duplicate Sub-task",
                    "externalId": "3"
                }
            ]
        }
    ]
}
tip/resting Created with Sketch.

To specify a fix version for an imported issue, make sure you include the fixVersions in the issues object and versions in the projects object, and shown is the example above.


Custom Fields

The JSON Importers plugin supports custom fields. Below is a list of custom fields that come bundled with Jira. If you have installed any additional plugins that have custom fields, these fields will also be supported, however they are not included in this list.

  • com.atlassian.jira.plugin.system.customfieldtypes:textfield

  • com.atlassian.jira.plugin.system.customfieldtypes:textarea

  • com.atlassian.jira.plugin.system.customfieldtypes:datepicker

  • com.atlassian.jira.plugin.system.customfieldtypes:datetime

  • com.atlassian.jira.plugin.system.customfieldtypes:float

  • com.atlassian.jira.plugin.system.customfieldtypes:select

  • com.atlassian.jira.plugin.system.customfieldtypes:radiobuttons

  • com.atlassian.jira.plugin.system.customfieldtypes:project

  • com.atlassian.jira.plugin.system.customfieldtypes:multiversion

  • com.atlassian.jira.plugin.system.customfieldtypes:version

  • com.atlassian.jira.plugin.system.customfieldtypes:userpicker

  • com.atlassian.jira.plugin.system.customfieldtypes:url

  • com.atlassian.jira.plugin.system.customfieldtypes:multiselect

  • com.atlassian.jira.plugin.system.customfieldtypes:multicheckboxes

  • com.atlassian.jira.plugin.system.customfieldtypes:multiuserpicker

  • com.atlassian.jira.plugin.system.customfieldtypes:multigrouppicker

  • com.atlassian.jira.plugin.system.customfieldtypes:grouppicker

  • com.atlassian.jira.plugin.system.customfieldtypes:cascadingselect

  • com.atlassian.jira.plugin.system.customfieldtypes:readonlyfield

  • com.atlassian.jira.plugin.system.customfieldtypes:labels

  • com.pyxis.greenhopper.jira:gh-sprint

The custom field example below shows some syntax for adding custom fields, including an example of a cascading custom field. If the custom field is not listed above, the "fieldType" can be obtained from the Custom Fields configuration page, by inspecting the source HTML. The "value" is specific to each custom field, and you can find this by inspecting the Edit Issue page's source HTML.

Custom field example
"customFieldValues": [
    //Custom fields which accept single values:
    {
        "fieldName": "My Awesome Text Field (single line)",
        "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:textfield",
        "value": "some text"
    },
    {
        "fieldName": "My Awesome Select List (single choice)",
        "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:select",
        "value": "some select"
    },
    //Custom fields which accept multiple values:
    {
        "fieldName": "My Awesome Checkboxes",
        "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:multicheckboxes",
        "value": [ "multiple", "checkboxes" ]
    },
    {
        "fieldName": "My Awesome User Picker (multiple users)",
        "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:multiuserpicker",
        "value": [ "admin", "fred" ]
    },
    //Custom fields which accepts options in hierarchy (cascading select fields):
    {
        "fieldName": "My Awesome Select List (cascading)",
        "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:cascadingselect",
        "value": { "": "Parent Value", "1": "Child Value" }
    }
]

Specific JSON File Examples

Further specific JSON file examples include:

Users

This example covers a full user. In this example, two groups have been specified. If a group does not exist already, the Jira Importers plugin will create it.

User example
"users": [ 
	{
        "name" : "abcde-12345-fedcba",
        "groups" : [ "jira-users", "my-custom-group" ],
        "active" : true,
        "email" : "user1@example.com",
        "fullname" : "User 1"
	}
]

Project key and issue key

You can assign a key to both the project and the issue. These keys can be different. This example will create a project with one issue, "SAM-123".

Project key and issue key example
{
    "projects": [
        {
            "name": "Sample data",
            "key": "SAM",
            "issues": [
                {
					"key" : "SAM-123",
                    "status" : "Open",
                    "reporter" : "abcde-12345-fedcba",
                    "summary" : "Parent case",
                    "externalId": "123"
                }
            ]
        }
    ]
}

Comments

This example shows how you can import multiple comments for an issue.

Comment example
{
    "projects": [
        {
            "name": "Sample data",
            "key": "SAM",
            "issues": [
                {
                    "status" : "Open",
                    "reporter" : "abcde-12345-fedcba",
                    "summary" : "Parent case",
                    "externalId": "1",
                    "comments": [
                        {
                            "body": "This is a comment from admin 5 days ago",
                            "author": "abcde-12345-fedcba",
                            "created": "2012-08-31T17:59:02.161+0100"
                        },
                        {
                            "body": "This is a comment from admin 1 day ago",
                            "author": "abcde-12345-fedcba",
                            "created": "2012-08-31T17:59:02.161+0100"
                        }
                    ]
                }
            ]
        }
    ]
}

Worklogs

This example shows the syntax to import worklog detail.

Worklog example
"worklogs": [
        {
            "author": "abcde-12345-fedcba",
            "comment": "Worklog",
            "startDate": "2012-08-31T17:59:02.161+0100",
            "timeSpent": "PT1M"
        },
        {
            "author": "abcde-12345-fedcba",
            "startDate": "2012-08-31T17:59:02.161+0100",
            "timeSpent": "PT3H"
        }
    ]

Component

Components can be specified in a JSON file in two ways, by providing a name, or by providing an object. This example shows both. The Jira Importers plugin will always create a new component with "Default Assignee" switched to "Project Default", as you are unable to specify a "Default Assignee".

Component example
"components": [
    "Component", //Component specified only by name
    { // Component specified by object
        "name": "edcba-12345-abcdef",
        "lead": "abcde-12345-fedcba",
        "description": "Some description"
    }
]

Issues with Time Tracking

Time Tracking detail can be imported with an issue. This example shows you an issue with Time Tracking detail. The "originalEstimate", "timeSpent", and "estimate" values must be in Period format (Format ISO_8601 - Durations). The "startDate" value accepts both the DateTime and Period format.

Please ensure Time Tracking is enabled in Jira before you start your import, otherwise the data will be ignored by the Jira Importers plugin during the import.

Issues with time tracking
"issues": [
    {
        "summary" : "My Example Time Tracking issue",
        "externalId": "1",
        "originalEstimate": "P1W3D",
        "timeSpent": "PT4H",
        "estimate": "P2D",
        "worklogs": [
            {
                "author": "abcde-12345-fedcba",
                "comment": "Worklog",
                "startDate": "P-1D", //can be a Period or DateTime
                "timeSpent": "PT1M"
            },
            {
                "author": "abcde-12345-fedcba",
                "startDate": "2014-01-14T17:00:00.000+0100",
                "timeSpent": "PT3H"
            }
        ]
    }
]

Sprint

In this example, a new sprint named "New Sprint" is created directly from the JSON file and added to the board with rapidViewId = 30. If the sprint is completed, include this data in the state parameter (optional).

Sprint
{
  "projects": [
    {
      "name": "Project",
      "key": "KEY",
      "issues": [
        {
          "externalId": "51",
          "priority" : "High",
          "description" : "Test JSON import",
          "status" : "TO DO",
          "reporter" : "abcde-12345-fedcba",
          "issueType" : "Bug",
          "summary" : "Test JSON import",
          "customFieldValues": [
            {
              "fieldName": "Sprint",
              "fieldType": "com.pyxis.greenhopper.jira:gh-sprint",
              "value": [
                {
                  "rapidViewId": 30,
                  "state": "Complete",
                  "name": "New Sprint"
                }
              ]
            }
          ]
        }
      ]
    }
  ]
}

Dates can be represented in SimpleDateFormat "yyyy-MM-dd'T'HH:mm:ss.SSSZ" (example output: "2012-08-31T15:59:02.161+0100") or you can use relative dates like "P-1D" (which means one day ago).

Running the JSON File Import Wizard

  1. Choose the Jira icon (, or ) > Jira settings > System
  2. Click External System Import and select JSON.
  3. Choose your JSON file and click Begin Import.

If you have a problem with the import (or you're just curious), click download a detailed log to view detailed information about the JSON file import process.

Last modified on Jul 29, 2019

Was this helpful?

Yes
No
Provide feedback about this article
Powered by Confluence and Scroll Viewport.