In today's interconnected digital ecosystem, JSON has become the lingua franca of data exchange. From REST APIs to configuration files, from database exports to IoT sensor data, JSON is everywhere. However, while JSON excels at machine-to-machine communication, different tools, platforms, and use cases often require data in specific formats.
Json_To_Many bridges this gap by providing seamless conversion from JSON to multiple output formats. Whether you're a developer documenting an API, a data analyst preparing reports, or a content creator transforming data for different platforms, this package eliminates the friction of manual format conversion.
- Developers need to transform API responses for documentation (Markdown)
- Data analysts require CSV exports for spreadsheet analysis
- DevOps teams need XML for legacy system integration
- Content creators want structured data in readable formats
- Business users need reports generated from JSON APIs
Json_To_Many makes these transformations effortless, allowing you to focus on what matters most: your data and insights.
The project is managed using uv for dependency management and packaging, and Ruff is used for linting to ensure code quality.
Note: This is a humble side project built out of passion for making data format conversions easier and more accessible.
- JSON to Markdown
- JSON to XML
- JSON to CSV
- JSON to TSV
- JSON to SQL
- JSON to YAML
- JSON to HTML
- JSON to PDF
Install Json_To_Many using pip:
pip install json_to_manyOr, if you prefer using uv:
uv add json_to_manyfrom json_to_many import convert
# Convert JSON string to Markdown and save to 'output.md'
json_string = '{"title": "Sample Document", "content": "This is a sample."}'
convert(json_string, 'markdown', output_file='output.md')
# Convert JSON file to XML and get the converted data
xml_data = convert('data.json', 'xml', return_data=True)
print(xml_data)From a JSON File:
from json_to_many import convert
# Convert JSON file to Markdown and save to 'output.md'
convert('data.json', 'markdown', output_file='output.md')From a JSON String:
from json_to_many import convert
json_string = '{"title": "Sample Document", "content": "This is a sample."}'
# Convert JSON string to Markdown and get the converted data
markdown_data = convert(json_string, 'markdown', return_data=True)
print(markdown_data)Sample Output:
# title
Sample Document
# content
This is a sample.The Markdown converter accepts optional keyword arguments to customise its output. All options are passed directly to convert().
| Option | Type | Default | Description |
|---|---|---|---|
title |
str |
None |
Prepends # {title} at the top of the document |
heading_offset |
int |
0 |
Shifts all heading levels by this amount (e.g. 1 makes top-level keys H2) |
max_heading_level |
int |
6 |
Keys deeper than this render as **bold** instead of headings |
bullet_lists |
bool |
True |
Renders lists of primitives as - item bullet points |
Example:
from json_to_many import convert
data = {
"Project": {
"Name": "MyApp",
"Tech": ["Python", "FastAPI"],
}
}
# Shift headings down one level and add a document title
md = convert(data, "markdown", return_data=True,
title="Project Report",
heading_offset=1,
bullet_lists=True)
print(md)# Project Report
## Project
### Name
MyApp
### Tech
- Python
- FastAPI| Option | Type | Default | Description |
|---|---|---|---|
table_for_lists |
bool |
False |
Renders a list of dicts with common keys as a GFM pipe table |
Example:
data = {
"Users": [
{"name": "Alice", "role": "admin"},
{"name": "Bob", "role": "user"},
]
}
md = convert(data, "markdown", return_data=True, table_for_lists=True)# Users
| name | role |
| --- | --- |
| Alice | admin |
| Bob | user || Option | Type | Default | Description |
|---|---|---|---|
frontmatter |
dict |
None |
Emits a YAML frontmatter block (for static site generators, Obsidian, etc.) |
Supports str, int, float, bool, and None values. No external dependencies required.
Example:
md = convert(data, "markdown", return_data=True,
frontmatter={"title": "API Docs", "date": "2025-02-21", "draft": False})---
title: API Docs
date: 2025-02-21
draft: false
---
...content...| Option | Type | Default | Description |
|---|---|---|---|
code_block_keys |
list |
[] |
Values for these keys are rendered as fenced code blocks |
Example:
data = {
"endpoint": "/users",
"example_request": '{"filter": "active"}',
}
md = convert(data, "markdown", return_data=True,
code_block_keys=["example_request"])# endpoint
/users
# example_request
\`\`\`example_request
{"filter": "active"}
\`\`\`From a Python Dictionary:
from json_to_many import convert
json_data = {
"note": {
"to": "Alice",
"from": "Bob",
"message": "Hello, Alice!"
}
}
# Convert JSON data to XML and save to 'note.xml'
convert(json_data, 'xml', output_file='note.xml')Get Converted XML Data Without Saving:
xml_data = convert(json_data, 'xml', return_data=True)
print(xml_data)Sample Output:
<root><note><to>Alice</to><from>Bob</from><message>Hello, Alice!</message></note></root>From a Python List of Dictionaries:
from json_to_many import convert
json_data = [
{"name": "Alice", "age": 30, "city": "New York"},
{"name": "Bob", "age": 25, "city": "Los Angeles"}
]
# Convert JSON data to CSV and save to 'data.csv'
convert(json_data, 'csv', output_file='data.csv')Get Converted CSV Data Without Saving:
csv_data = convert(json_data, 'csv', return_data=True)
print(csv_data)Sample Output:
name,age,city
Alice,30,New York
Bob,25,Los AngelesNote: The CSV converter automatically flattens nested JSON structures and handles complex data types appropriately.
The examples directory contains sample scripts and data to help you get started.
- JSON to Markdown Conversion: json_to_markdown_example.py
- JSON to XML Conversion: json_to_xml_example.py
- JSON to CSV Conversion: json_to_csv_example.py
-
Clone the Repository:
git clone https://github.com/ananthanandanan/Json_To_Many.git cd Json_To_Many/examples -
Install Dependencies (for development):
uv sync
Or install the package directly:
pip install json_to_many
-
Run an Example Script:
uv run python json_to_markdown_example.py # or if installed globally: python json_to_markdown_example.py
The project uses uv for dependency management and packaging, and Ruff for linting and code style enforcement.
-
Fork the Repository:
Click the "Fork" button at the top right corner of the repository page.
-
Clone Your Fork:
git clone https://github.com/ananthanandanan/Json_To_Many.git cd Json_To_Many -
Install Dependencies:
uv sync
-
Run Tests:
uv run pytest
-
Check Code Quality with Ruff:
uv run ruff check . -
Build the Package:
uv build
- Code Style: Follow PEP 8 guidelines. Use Ruff for linting and code style enforcement.
- Testing: Write unit tests for new features and bug fixes.
- Documentation: Update documentation and examples to reflect changes.
Maintainers: See RELEASING.md for the full release process (version bump, tagging, GitHub Release, and PyPI publish).
Contributions are welcome! Here's how you can help:
- Report Bugs: If you find a bug, please report it by opening an issue.
- Suggest Features: Have an idea for a new feature? Feel free to share it.
- Submit Pull Requests: If you'd like to fix a bug or implement a feature, you're welcome to contribute code.
-
Create an Issue:
Before starting work on a feature or bug fix, please create an issue to discuss it.
-
Branch Naming:
Use descriptive branch names, e.g.,
feature/json-to-yamlorbugfix/fix-xml-output. -
Pull Requests:
- Include a clear description of the changes.
- Reference the issue number.
- Ensure all tests pass and code quality checks are successful.
-
Code Quality:
- Run
uv run pytestto ensure all tests pass. - Run
uv run ruff check .to ensure code style compliance.
- Run
For detailed technical specifications, implementation timelines, and architecture diagrams, see our comprehensive ROADMAP.md.
Want to contribute to this roadmap? Check out our Contributing guidelines or open an issue to discuss new ideas!
This project is licensed under the MIT License - see the LICENSE file for details.
For questions or support, please open an issue or contact K N Anantha nandanan.