Bitbucket Issues JSON to HTML Converter
Convert Bitbucket exported issues from JSON to a formatted, downloadable HTML file. Renders issues with comments, filters, and statistics.
About
Bitbucket's issue tracker export produces a db-1.0.json file containing issues, comments, attachments metadata, and version history. Losing access to a hosted repository means losing that issue history unless it has been converted to a portable format. This tool parses the exported JSON structure, joins each issue with its associated comments by matching issue_id fields, and generates a self-contained HTML document. The output requires no server, no database, and no runtime dependencies. It renders in any browser as a permanent archive. Note: the converter assumes Bitbucket Cloud export schema (version 1.0). Older on-premise exports may use different field names and will fail validation.
Formulas
The converter performs a join operation between the issues collection and the comments collection. For each issue Ik, the set of associated comments Ck is determined by matching the foreign key:
Comments within each set are sorted chronologically:
The total output size S in characters is approximately:
where Tk is the template overhead per issue (HTML wrapper, metadata fields) and cj is the rendered length of each comment. The content sanitization pass applies HTML entity escaping: & → &, < → <, > → > before any markup rendering to prevent XSS in the output file.
Reference Data
| JSON Field | Type | Description | Required | Example Value |
|---|---|---|---|---|
| id | integer | Unique issue identifier | Yes | 42 |
| title | string | Issue title / summary | Yes | Fix login redirect |
| status | string | Current state | Yes | open, resolved, closed, on hold, invalid, duplicate, wontfix |
| priority | string | Severity level | Yes | trivial, minor, major, critical, blocker |
| kind | string | Issue classification | Yes | bug, enhancement, proposal, task |
| content | string | Issue body / description text | No | Markdown-formatted text |
| reporter | string | Username of creator | No | john_doe |
| assignee | string | Assigned user | No | jane_smith |
| created_on | ISO 8601 | Creation timestamp | Yes | 2023-06-15T10:30:00Z |
| updated_on | ISO 8601 | Last modification timestamp | No | 2024-01-20T14:00:00Z |
| comment_count | integer | Number of associated comments | No | 7 |
| comments (array) | array | Nested or separate comment objects | No | Array of comment objects |
| comments[].id | integer | Comment identifier | Yes* | 101 |
| comments[].issue | integer | Parent issue ID for joining | Yes* | 42 |
| comments[].content | string | Comment body text | No | Plain or markdown text |
| comments[].user | string | Comment author | No | contributor_x |
| comments[].created_on | ISO 8601 | Comment timestamp | No | 2023-06-16T08:00:00Z |
| component | string | Project component label | No | backend, frontend, api |
| milestone | string | Target milestone or version | No | v2.1.0 |
| version | string | Affected software version | No | v1.9.3 |
| votes | integer | Community vote count | No | 12 |
| watchers | integer | Number of watchers | No | 5 |
Frequently Asked Questions
issues and comments (or comments nested within each issue object). Each issue must have at minimum an id, title, status, and created_on field. If your export uses a different root key (e.g., the entire file is a flat array), the tool attempts auto-detection by scanning for objects containing id and title properties.issue field (an integer foreign key) against each issue's id. Comments with no matching issue ID are collected into an "orphaned comments" section at the end of the output. This join has O(n + m) complexity using a hash map lookup.<style> tag. No external fonts, scripts, or CDN resources are referenced. The file renders correctly when opened from a local filesystem in any modern browser.<, >, &, and " are replaced with their entity equivalents. This prevents XSS injection in the output file. After escaping, basic Bitbucket markup patterns (bold with ** and italic with *) are converted to safe HTML tags.