Importing data from JSON
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.
{
"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"
}
]
}
]
}
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.
"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.
"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".
{
"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.
{
"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.
"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".
"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": [
{
"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 closed, include this data in the state parameter (optional). The sprint state may be one of:
• "FUTURE" (the default)
• "ACTIVE"
• "CLOSED"
When importing an active or closed sprint, it's required for the start and end dates to be present - representing the start time and planned completion time. For closed sprints, the completion date is also required.
{
"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": CLOSED",
"startDate": "2018-01-01",
"endDate": "2018-01-01",
"completeDate": "2018-01-01",
"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
- Choose > System
- Click External System Import and select JSON.
Choose your JSON file and click Begin Import.
If your JSON file consists of Jira Service Management projects with comments, all the comments from your import file will become public after the JSON 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.