2015-02-26 11:32:29 +00:00
|
|
|
# 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.
|
2015-04-27 19:05:48 +00:00
|
|
|
A fellow father-brother can benefit from low and constant memory usage, although I don't think he would.
|
2015-02-26 11:32:29 +00:00
|
|
|
|
|
|
|
```bash
|
|
|
|
# Running lexer tests and benchmarks
|
|
|
|
cd lexer/
|
|
|
|
go test -bench .
|
|
|
|
```
|