condense-json 1.0

Simon Willison's Weblog Simon Willison's Weblog

Release: https://github.com/simonw/condense-json/releases/tag/1.0">condense-json 1.0


I'm trying to get braver at releasing 1.0 versions.

This little library is a year and a half old now - I've applied some sensible and non-disruptive fixes and shipped the big 1.0 for it.


Here's an example of what it can do, lifted from the README:


{
"foo": {
"bar": {
"string": "This is a string with foxes in it",
"nested": {
"more": ["Here is a string", "another with foxes in it too"]
}
}
}
}

Combine that with a replacements object:


{"1": "with foxes in it"}

And condense_json(input_json, replacements) produces the following:


{
"foo": {
"bar": {
"string": {"$r": ["This is a string ", {"$": "1"}]},
"nested": {
"more": ["Here is a string", {"$r": ["another ", {"$": "1"}, " too"]}]
}
}
}
}

It scans for strings or substrings that are present in that replacements object and replaces those with a special {"$r": ...} syntax in the output.


You can reverse the effect with uncondense_json(condensed, replacements).



The idea is to make it easier to store JSON that includes duplicated data from other related structures.

I use it to save space in the SQLite logs generated by https://llm.datasette.io/">LLM - see https://github.com/simonw/llm/pull/1586">PR #1586 for the latest iteration of that.




Tags: https://simonwillison.net/tags/json">json, https://simonwillison.net/tags/projects">projects, https://simonwillison.net/tags/python">python, https://simonwillison.net/tags/llm">llm

Read full article at Simon Willison's Weblog →