Add readme
This commit is contained in:
parent
f15ee2d6d7
commit
ca9d198b6b
|
@ -1,2 +1,2 @@
|
||||||
main
|
kifflom
|
||||||
big*.json
|
big*.json
|
||||||
|
|
|
@ -0,0 +1,51 @@
|
||||||
|
# Kifflom!
|
||||||
|
|
||||||
|
Kifflom is a (streaming) JSON parser that does not build any structures from the document,
|
||||||
|
but returns specific values matched by given selectors instead.
|
||||||
|
|
||||||
|
## Example
|
||||||
|
|
||||||
|
Lets take this JSON description of fruits.
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"prices": {
|
||||||
|
"apple": 25,
|
||||||
|
"banana": 10,
|
||||||
|
"peach": 40.5,
|
||||||
|
"pomelo": null
|
||||||
|
},
|
||||||
|
"bananas": [
|
||||||
|
{"length": 13, "weight": 5},
|
||||||
|
{"length": 18, "weight": 8},!
|
||||||
|
{"length": 13, "weight": 4}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
In order to get the weight of the first banana and prices for all the fruits
|
||||||
|
we can use such a command:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cat test.json | kifflom -s ".bananas#0.weight .prices.*"
|
||||||
|
# .prices.* 25
|
||||||
|
# .prices.* 10
|
||||||
|
# .prices.* 40.5
|
||||||
|
# .prices.* <nil>
|
||||||
|
#
|
||||||
|
# Parse error! Yay!
|
||||||
|
# [010:036] (Error: Unexpected symbol: '!')
|
||||||
|
# .bananas#0.weight 5
|
||||||
|
```
|
||||||
|
|
||||||
|
## Performance
|
||||||
|
|
||||||
|
As you can learn from benchmarks described below, kifflom's lexer itself is
|
||||||
|
roughly 8.5 times slower than the standard JSON parser on any amount of data.
|
||||||
|
You can benefit from low and constant memory usage, although I don't think you would.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Running lexer tests and benchmarks
|
||||||
|
cd lexer/
|
||||||
|
go test -bench .
|
||||||
|
```
|
Loading…
Reference in New Issue