Fixes broken JSON string objects
Project description
fix-busted-json
Fix broken json using Python.
For Python 3.6+.
This project fixes broken JSON with the following issues:
- Missing quotes around key names
- Wrong quotes around key names and strings
- Single quotes
- Backticks
- Escaped double quote
- Double escaped double quote
- "Smart" i.e. curly quotes
- Missing commas between key-value pairs and array elements
- Trailing comma after last key-value pair
- Concatenation of string fields
- Replace Python True/False/None with JSON true/false/null
Utility functions are also provided for finding JSON objects in text.
https://github.com/Qarj/fix-busted-json
https://pypi.org/project/fix-busted-json
Quickstart
pip install fix-busted-json
Make a file called example_repair_json.py
:
#!/usr/bin/env python3
from fix_busted_json import repair_json
invalid_json = "{ name: 'John' 'age': 30, 'city': 'New' + ' York', }"
fixed_json = repair_json(invalid_json)
print(fixed_json)
Note the issues in the invalid JSON:
- name is unquoted
- use of single quotes, JSON spec requires double quotes
- Missing comma
- Concatenation of string fields - not allowed in JSON
- Trailing comma
Run it:
python example_repair_json.py
Output:
{ "name": "John", "age": 30, "city": "New York" }
API
repair_json
#!/usr/bin/env python3
from fix_busted_json import repair_json
invalid_json = "{ name: 'John' }"
fixed_json = repair_json(invalid_json)
log_jsons
Looks for JSON objects in text and logs them, also recursively logging any JSON objects found in the values of the top-level JSON object.
#!/usr/bin/env python3
from fix_busted_json import log_jsons
log_jsons("""some text { key1: true, 'key2': " { inner: 'value', } " } text { a: 1 } text""")
Running it gives output:
some text
{
"key1": true,
"key2": " { inner: 'value', } "
}
FOUND JSON found in key key2 --->
{
"inner": "value"
}
text
{
"a": 1
}
text
to_array_of_plain_strings_or_json
Breaks text into an array of plain strings and JSON objects.
#!/usr/bin/env python3
from fix_busted_json import to_array_of_plain_strings_or_json
result = to_array_of_plain_strings_or_json("""some text { key1: true, 'key2': " { inner: 'value', } " } text { a: 1 } text""")
print(result)
Gives output:
['some text ', '{ "key1": true, "key2": " { inner: \'value\', } " }', ' text ', '{ "a": 1 }', ' text']
first_json, last_json, largest_json, json_matching
Utility functions for finding JSON objects in text.
#!/usr/bin/env python3
import re
from fix_busted_json import first_json, last_json, largest_json, json_matching
jsons = "text { first: 123 } etc { second_example: 456 } etc { third: 789 } { fourth: 12 }"
print(first_json(jsons))
print(last_json(jsons))
print(largest_json(jsons))
print(json_matching(jsons, re.compile("thi")))
Output:
{ "first": 123 }
{ "fourth": 12 }
{ "second_example": 456 }
{ "third": 789 }
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for fix_busted_json-0.0.9-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | da460704cb87109cfe1a595dffec9c35d06c168e15b6db589dbf6560366a45cd |
|
MD5 | 217b8c0893811ef7eaca1450b1143ad3 |
|
BLAKE2b-256 | 9820e7039265ab5c8b41bc89f4f031f49dd105df5e7ce8e9c1fbc1ccbf7b84a9 |