Skip to content

Speed comparison (v3)

Below you can see a table with speed comparison of 3 parsers:

  • bash2json v3.0.0
  • bash2json v2.3.0
  • jq v1.6

Each parser was tested with 7 different actions using hyperfine with 500 runs each

CommandMean [ms]Min [ms]Max [ms]Relative
./bash2json-v3 '{ "foo": "bar" }' 'foo'6.6 ± 0.85.913.61.00
./bash2json-v2.3.0 '{ "foo": "bar" }' 'foo'12.5 ± 1.410.628.01.89 ± 0.31
echo '{ "foo": "bar" }' | jq-1.6 '.foo'44.6 ± 2.342.175.76.74 ± 0.85
./bash2json-v3 '{ "foo": { "foo2": "bar" } }' 'foo.foo2' -r8.5 ± 0.87.815.71.28 ± 0.19
./bash2json-v2.3.0 '{ "foo": { "foo2": "bar" } }' 'foo.foo2' -r19.0 ± 1.117.528.52.87 ± 0.37
echo '{ "foo": { "foo2": "bar" } }' | jq-1.6 '.foo.foo2' -r46.4 ± 10.438.995.57.01 ± 1.76
./bash2json-v2.3.0 '{ "foo": [{ "foo": "bar" },{ "foo": "othervalue" }] }' 'foo[0].foo' -r29.1 ± 1.826.348.34.40 ± 0.57
./bash2json-v3 '{ "foo": [{ "foo": "bar" },{ "foo": "othervalue" }] }' 'foo[0].foo' -r11.9 ± 0.411.216.51.79 ± 0.21
echo '{ "foo": [{ "foo": "bar" },{ "foo": "othervalue" }] }' | jq-1.6 '.foo[0].foo' -r44.6 ± 2.142.673.36.74 ± 0.84
./bash2json-v3 '{ "foo": "bar" }' --append 'foo1' 'bar1'10.1 ± 4.96.231.31.53 ± 0.76
./bash2json-v2.3.0 '{ "foo": "bar" }' --append 'foo1' 'bar1'14.5 ± 2.012.026.02.18 ± 0.39
echo '{ "foo": "bar" }' | jq-1.6 '. += { "foo1": "bar1" }'44.9 ± 1.743.160.76.78 ± 0.82
./bash2json-v3 '{ "foo": { "foo1": "bar" } }' --append 'foo.foo2' 'bar1'9.9 ± 0.79.222.71.50 ± 0.20
./bash2json-v2.3.0 '{ "foo": { "foo1": "bar" } }' --append 'foo.foo2' 'bar1'22.7 ± 1.320.435.93.43 ± 0.44
echo '{ "foo": { "foo1": "bar" } }' | jq-1.6 '.foo += { "foo2": "bar1" }'47.4 ± 10.940.6101.57.16 ± 1.84
./bash2json-v3 '{ "foo": [{ "foo1": "bar" }] }' --append 'foo[]' 'bar1'10.2 ± 1.09.216.71.54 ± 0.24
./bash2json-v2.3.0 '{ "foo": [{ "foo1": "bar" }] }' --append 'foo[]' 'bar1'21.1 ± 2.518.147.63.19 ± 0.53
echo '{ "foo": [{ "foo1": "bar" }] }' | jq-1.6 '.foo += [ "bar1" ]'43.9 ± 2.240.964.06.64 ± 0.83
./bash2json-v3 '{ "foo": [{ "foo1": "bar" },{ "foo2" :"bar" }] }' --append 'foo[0].foo' 'bar1'18.9 ± 7.714.156.12.86 ± 1.21
./bash2json-v2.3.0 '{ "foo": [{ "foo1": "bar" },{ "foo2" :"bar" }] }' --append 'foo[0].foo' 'bar1'39.6 ± 2.535.763.75.98 ± 0.78
echo '{ "foo": [{ "foo1": "bar" },{ "foo2" :"bar" }] }' | jq-1.6 '.foo[0] += { "foo": "bar1" }'45.3 ± 2.442.260.76.85 ± 0.86

2 versions of bash2json are tested (v3 and v2.3.0). Both files are sourced and then executed as function.

CommandMean [ms]Min [ms]Max [ms]Relative
bash2json '{ "foo": "bar" }' 'foo'7.4 ± 0.66.212.31.00
bash2json '{ "foo": { "foo2": "bar" } }' 'foo.foo2' -r13.2 ± 1.011.326.01.79 ± 0.20
bash2json '{ "foo": [{ "foo": "bar" },{ "foo": "othervalue" }] }' 'foo[0].foo' -r25.6 ± 8.019.958.03.47 ± 1.11
bash2json '{ "foo": "bar" }' --append 'foo1' 'bar1'8.0 ± 1.16.619.61.08 ± 0.17
bash2json '{ "foo": { "foo1": "bar" } }' --append 'foo.foo2' 'bar1'17.2 ± 1.215.424.72.32 ± 0.24
bash2json '{ "foo": [{ "foo1": "bar" }] }' --append 'foo[]' 'bar1'15.4 ± 1.614.133.42.08 ± 0.28
bash2json '{ "foo": [{ "foo1": "bar" },{ "foo2" :"bar" }] }' --append 'foo[0].foo' 'bar1'33.0 ± 1.429.944.84.48 ± 0.41
bash2json '{ "foo": "bar" }' --from-json --output="arr"12.0 ± 5.98.230.61.63 ± 0.81
bash2json '{ "foo": "bar", "foo1": { "foo2": "bar" } }' --from-json --output="arr"19.1 ± 1.817.232.62.59 ± 0.32
bash2json '["foo","bar"]' --from-json9.6 ± 0.88.519.51.30 ± 0.16
CommandMean [ms]Min [ms]Max [ms]Relative
bash2json '{ "foo": "bar" }' 'foo'1.8 ± 0.21.33.91.00
bash2json '{ "foo": { "foo2": "bar" } }' 'foo.foo2' -r5.4 ± 3.72.816.43.05 ± 2.10
bash2json '{ "foo": [{ "foo": "bar" },{ "foo": "othervalue" }] }' 'foo[0].foo' -r6.7 ± 0.86.116.13.78 ± 0.67
bash2json '{ "foo": "bar" }' --append 'foo1' 'bar1'2.5 ± 0.62.07.21.42 ± 0.38
bash2json '{ "foo": { "foo1": "bar" } }' --append 'foo.foo2' 'bar1'5.1 ± 1.14.015.82.88 ± 0.74
bash2json '{ "foo": [{ "foo1": "bar" }] }' --append 'foo[]' 'bar1'4.8 ± 0.44.08.32.71 ± 0.42
bash2json '{ "foo": [{ "foo1": "bar" },{ "foo2" :"bar" }] }' --append 'foo[0].foo' 'bar1'9.9 ± 0.98.720.75.55 ± 0.90
bash2json '{ "foo": "bar" }' --from-json --output="arr"3.5 ± 0.62.913.21.95 ± 0.41
bash2json '{ "foo": "bar", "foo1": { "foo2": "bar" } }' --from-json --output="arr"7.5 ± 1.16.322.14.20 ± 0.81
bash2json '["foo","bar"]' --from-json3.3 ± 0.62.79.51.88 ± 0.44