π« htmljson: rich rendering of JSON as HTML in Go
![OpenSSF Scorecard](https://camo.githubusercontent.com/1fc626ac05820e288dfaed9f23acc747ca04fe1f2eeadeaad37bc7b33c7b56dd/68747470733a2f2f6170692e736563757269747973636f726563617264732e6465762f70726f6a656374732f6769746875622e636f6d2f6e696b6f6c6179647562696e612f68746d6c6a736f6e2f6261646765)
- pure Go
- no Javascript
- no dependencies
- no
reflect
- no
fmt
- 300 LOC
- customizable rendering
- JSON Path for elements access
![](https://raw.githubusercontent.com/nikolaydubina/htmljson/master/./doc/example-color.png)
// JSON has to be any
var v any
json.Unmarshal(exampleJSON, &v)
htmlPage := htmljson.DefaultPageMarshalerm.Marshal(v)
// JSON has to be any
var v any
json.Unmarshal(exampleJSON, &v)
// customize how to render HTML elements
s := htmljson.Marshaler{
Null: htmljson.NullHTML,
Bool: htmljson.BoolHTML,
String: htmljson.StringHTML,
Number: func(k string, v float64, s string) string {
if k == "$.cakes.strawberry-cake.size" {
return `<div class="json-value json-number" style="color:red;">` + s + `</div>`
}
if v > 10 {
return `<div class="json-value json-number" style="color:blue;">` + s + `</div>`
}
return `<div class="json-value json-number">` + s + `</div>`
},
Array: htmljson.DefaultArrayHTML,
Map: htmljson.DefaultMapHTML,
Row: htmljson.DefaultRowHTML{Padding: 4}.Marshal,
}
m := htmljson.DefaultPageMarshaler
m.Marshaler = &s
// write HTML page
htmlPage := m.Marshal(v)