#json #fix-json #bad-json #dirty-json

app rekson

A simple standalone to rectify json

2 releases

0.0.2 Dec 6, 2024
0.0.1 Nov 9, 2024

#269 in Development tools

MIT license

18KB
425 lines

⚡ rekson

rectify your json

🍎 Motivation

I frequently edit json files. It is a completely unusable configuration language with poorly written grammar. So I came up with a simple program to fix manually edited json. This is not a formatter, rather it is intended to be used in conjunction with one, for example jq.

✨ Features

  • trailing comma ({,"a":3,} -> {"a":3})
  • comma between values ([1 2] -> [1, 2])
  • correct quotes ({`key`: 'value'} -> {"key": "value"})
  • multiline strings
  • correct booleans (True -> true)
  • correct nulls (None -> null)
  • quote unknown values ({a:3} -> {"a":3})
  • correct colon ({"a"=3} -> {"a":3})
  • insert colon ({b 4} -> {"b":4})
  • fix brackets ({[{[{]] -> {[{[{}]}]})
  • replace parenthesis with brackets (((),()) -> [[],[]])
  • async io

💡 Plans

  • strip comments
  • convert numbers (0xff -> 256)
  • COW (reduce memory copying)
  • multithreading

✅ Pros

  • written in Rust => instant format on write
  • no dependencies => faster to build than to install an npm package
  • can be used as standalone executable
  • can be used as standalone library

❌ Cons

  • barebone simplicity => adding new features requires rethinking the architecture
  • single-threaded (for now)
  • no configuration (for now)
  • small testsuite (for now)

🚀 Installation

crates.io

cargo install rekson

From source

cargo install --git https://github.com/pinbraerts/rekson

Binary

Prebuilt binaries can be found at the releases page.

🛠️ Usage

Pass dirty json to stdin, receive fixed json in stdout.

conform.nvim

require("conform").setup({
  formatters = {
    rekson = {
      command = "rekson",
    },
  },
  formatters_by_ft = {
    json = { "rekson" },
  })
})

👀 Alternatives

No runtime deps