From 6e70d1b3f8eff2258a4def24d5700a9e78d1b916 Mon Sep 17 00:00:00 2001 From: JG-1202 <80622886+JG-1202@users.noreply.github.com> Date: Sat, 24 Apr 2021 12:32:01 +0200 Subject: [PATCH] Updated queriers and added js-json-go Updated queriers to their latest version and added js-json-go querier --- README.md | 124 ++++++++++++--------- package-lock.json | 222 +++++++++++-------------------------- package.json | 13 ++- src/index.js | 2 + src/queriers/js-json-go.js | 21 ++++ 5 files changed, 163 insertions(+), 219 deletions(-) create mode 100644 src/queriers/js-json-go.js diff --git a/README.md b/README.md index 2815448..376c230 100644 --- a/README.md +++ b/README.md @@ -8,12 +8,13 @@ The libraries tested are: | [json-query](https://www.npmjs.com/package/json-query) | [![npm](https://img.shields.io/npm/dw/json-query.svg)](https://www.npmjs.com/package/json-query) | ![GitHub last commit](https://img.shields.io/github/last-commit/mmckegg/json-query.svg) | | [jsonpath-plus](https://www.npmjs.com/package/jsonpath-plus) | [![npm](https://img.shields.io/npm/dw/jsonpath-plus.svg)](https://www.npmjs.com/package/jsonpath-plus) | ![GitHub last commit](https://img.shields.io/github/last-commit/s3u/JSONPath.svg) | | [jsonpath](https://www.npmjs.com/package/jsonpath) | [![npm](https://img.shields.io/npm/dw/jsonpath.svg)](https://www.npmjs.com/package/jsonpath) | ![GitHub last commit](https://img.shields.io/github/last-commit/dchester/jsonpath.svg) | +| [js-json-go](https://www.npmjs.com/package/js-json-go) | [![npm](https://img.shields.io/npm/dw/js-json-go.svg)](https://www.npmjs.com/package/jg-json-go) | ![GitHub last commit](https://img.shields.io/github/last-commit/JG-1202/js-json-go.svg) | | [JSONStream](https://www.npmjs.com/package/JSONStream) | [![npm](https://img.shields.io/npm/dw/JSONStream.svg)](https://www.npmjs.com/package/JSONStream) | ![GitHub last commit](https://img.shields.io/github/last-commit/dominictarr/JSONStream.svg) | | [oboe](https://www.npmjs.com/package/oboe) | [![npm](https://img.shields.io/npm/dw/oboe.svg)](https://www.npmjs.com/package/oboe) | ![GitHub last commit](https://img.shields.io/github/last-commit/jimhigson/oboe.js.svg) | | [map-filter-reduce](https://www.npmjs.com/package/map-filter-reduce) | [![npm](https://img.shields.io/npm/dw/map-filter-reduce.svg)](https://www.npmjs.com/package/map-filter-reduce) | ![GitHub last commit](https://img.shields.io/github/last-commit/dominictarr/map-filter-reduce.svg) | `jsonpath-plus` and `jsonpath` use the [XPath for Json Specification](https://goessner.net/articles/JsonPath). -`json-query` has its own custom DSL. `JSONStream`, `oboe`, and `map-filter-reduce` are streaming libraries, though I've had varying success in making them anywhere near as performant. +`json-query` and `js-json-go` have its own custom DSL. `JSONStream`, `oboe`, and `map-filter-reduce` are streaming libraries, though I've had varying success in making them anywhere near as performant. ## How to run @@ -34,12 +35,12 @@ The performance test runs three queries on each of the libraries. All three quer ### Results -Ran using Macbook Pro, 2.2 GHz Intel Core i7, 16 GB 2400 MHz DDR4 +Ran using Macbook Pro, 2,9 GHz Dual-Core Intel Core i5, 8 GB 2133 MHz LPDDR3 ``` $ npm run perf -> perf-json-querying@1.0.0 perf /Users/andrew/Code/scratchwork/perf-json-querying +> perf-json-querying@1.0.1 perf /Users/user/json-querying-performance-testing-master > node --max-old-space-size=4096 src smallCityLots 49998 items. @@ -48,44 +49,52 @@ largeCityLots 206560 items. smallCityLots: - json-query: - - shallow took 0.0176 seconds. - - deep took 0.0502 seconds. - - conditional took 0.0408 seconds. + - shallow took 0.0146 seconds. + - deep took 0.0326 seconds. + - conditional took 0.023 seconds. - jsonpath-plus: - - shallow took 0.4146 seconds. - - deep took 0.4239 seconds. - - conditional took 0.326 seconds. + - shallow took 0.4832 seconds. + - deep took 0.4658 seconds. + - conditional took 0.3347 seconds. - jsonpath: - - shallow took 1.1165 seconds. - - deep took 4.4373 seconds. - - conditional took 0.1387 seconds. + - shallow took 1.094 seconds. + - deep took 8.6515 seconds. + - conditional took 0.0299 seconds. +- js-json-go: + - shallow took 0.0256 seconds. + - deep took 0.0398 seconds. + - conditional took 0.1533 seconds. - JSONStream: - - shallow took 20.5 seconds. - - deep took 23.5372 seconds. + - shallow took 3.0701 seconds. + - deep took 3.2552 seconds. - oboe: - - shallow took 25.0891 seconds. - - deep took 32.5883 seconds. + - shallow took 3.898 seconds. + - deep took 4.1545 seconds. - map-filter-reduce: mediumCityLots: - json-query: - - shallow took 0.0489 seconds. - - deep took 0.0732 seconds. - - conditional took 0.0488 seconds. + - shallow took 0.0773 seconds. + - deep took 0.092 seconds. + - conditional took 0.0358 seconds. - jsonpath-plus: - - shallow took 0.8285 seconds. - - deep took 0.8567 seconds. - - conditional took 0.6074 seconds. + - shallow took 0.9456 seconds. + - deep took 0.9424 seconds. + - conditional took 0.677 seconds. - jsonpath: - - shallow took 2.2047 seconds. - - deep took 37.187 seconds. - - conditional took 0.2852 seconds. + - shallow took 2.2628 seconds. + - deep took 37.9562 seconds. + - conditional took 0.0533 seconds. +- js-json-go: + - shallow took 0.0503 seconds. + - deep took 0.0466 seconds. + - conditional took 0.218 seconds. - JSONStream: - - shallow took 199.4793 seconds. - - deep took 5.0332 seconds. + - shallow took 5.4356 seconds. + - deep took 6.2937 seconds. - oboe: - - shallow took 27.819 seconds. - - deep took 77.9259 seconds. + - shallow took 8.3065 seconds. + - deep took 8.7172 seconds. - map-filter-reduce: largeCityLots: @@ -94,19 +103,23 @@ json-query shallow failed, RangeError: Maximum call stack size exceeded. json-query deep failed, RangeError: Maximum call stack size exceeded. json-query conditional failed, RangeError: Maximum call stack size exceeded. - jsonpath-plus: - - shallow took 2.3345 seconds. - - deep took 2.472 seconds. - - conditional took 3.1351 seconds. + - shallow took 2.6208 seconds. + - deep took 2.7371 seconds. + - conditional took 1.4626 seconds. - jsonpath: - - shallow took 8.509 seconds. - - deep took 252.9623 seconds. - - conditional took 0.7586 seconds. + - shallow took 7.0133 seconds. + - deep took 166.297 seconds. + - conditional took 0.1198 seconds. +- js-json-go: + - shallow took 0.0926 seconds. + - deep took 0.0784 seconds. + - conditional took 0.443 seconds. - JSONStream: - - shallow took 54.8295 seconds. - - deep took 146.2962 seconds. + - shallow took 16.8393 seconds. + - deep took 17.5634 seconds. - oboe: - - shallow took 148.8824 seconds. - - deep took 216.7555 seconds. + - shallow took 21.9919 seconds. + - deep took 27.0612 seconds. - map-filter-reduce: @@ -117,22 +130,24 @@ smallCityLots ┌───────────────────┬───────────────────┬───────────────────┬───────────────────┐ │ (index) │ shallow │ deep │ conditional │ ├───────────────────┼───────────────────┼───────────────────┼───────────────────┤ -│ json-query │ 0.0176 │ 0.0502 │ 0.0408 │ -│ jsonpath-plus │ 0.4146 │ 0.4239 │ 0.326 │ -│ jsonpath │ 1.1165 │ 4.4373 │ 0.1387 │ -│ JSONStream │ 20.5 │ 23.5372 │ 'not possible' │ -│ oboe │ 25.0891 │ 32.5883 │ 'not possible' │ +│ json-query │ 0.0146 │ 0.0326 │ 0.023 │ +│ jsonpath-plus │ 0.4832 │ 0.4658 │ 0.3347 │ +│ jsonpath │ 1.094 │ 8.6515 │ 0.0299 │ +│ js-json-go │ 0.0256 │ 0.0398 │ 0.1533 │ +│ JSONStream │ 3.0701 │ 3.2552 │ 'not possible' │ +│ oboe │ 3.898 │ 4.1545 │ 'not possible' │ │ map-filter-reduce │ 'not implemented' │ 'not implemented' │ 'not implemented' │ └───────────────────┴───────────────────┴───────────────────┴───────────────────┘ mediumCityLots ┌───────────────────┬───────────────────┬───────────────────┬───────────────────┐ │ (index) │ shallow │ deep │ conditional │ ├───────────────────┼───────────────────┼───────────────────┼───────────────────┤ -│ json-query │ 0.0489 │ 0.0732 │ 0.0488 │ -│ jsonpath-plus │ 0.8285 │ 0.8567 │ 0.6074 │ -│ jsonpath │ 2.2047 │ 37.187 │ 0.2852 │ -│ JSONStream │ 199.4793 │ 5.0332 │ 'not possible' │ -│ oboe │ 27.819 │ 77.9259 │ 'not possible' │ +│ json-query │ 0.0773 │ 0.092 │ 0.0358 │ +│ jsonpath-plus │ 0.9456 │ 0.9424 │ 0.677 │ +│ jsonpath │ 2.2628 │ 37.9562 │ 0.0533 │ +│ js-json-go │ 0.0503 │ 0.0466 │ 0.218 │ +│ JSONStream │ 5.4356 │ 6.2937 │ 'not possible' │ +│ oboe │ 8.3065 │ 8.7172 │ 'not possible' │ │ map-filter-reduce │ 'not implemented' │ 'not implemented' │ 'not implemented' │ └───────────────────┴───────────────────┴───────────────────┴───────────────────┘ largeCityLots @@ -140,10 +155,11 @@ largeCityLots │ (index) │ shallow │ deep │ conditional │ ├───────────────────┼───────────────────┼───────────────────┼───────────────────┤ │ json-query │ 'failed' │ 'failed' │ 'failed' │ -│ jsonpath-plus │ 2.3345 │ 2.472 │ 3.1351 │ -│ jsonpath │ 8.509 │ 252.9623 │ 0.7586 │ -│ JSONStream │ 54.8295 │ 146.2962 │ 'not possible' │ -│ oboe │ 148.8824 │ 216.7555 │ 'not possible' │ +│ jsonpath-plus │ 2.6208 │ 2.7371 │ 1.4626 │ +│ jsonpath │ 7.0133 │ 166.297 │ 0.1198 │ +│ js-json-go │ 0.0926 │ 0.0784 │ 0.443 │ +│ JSONStream │ 16.8393 │ 17.5634 │ 'not possible' │ +│ oboe │ 21.9919 │ 27.0612 │ 'not possible' │ │ map-filter-reduce │ 'not implemented' │ 'not implemented' │ 'not implemented' │ └───────────────────┴───────────────────┴───────────────────┴───────────────────┘ -``` +``` \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 16c2866..1eb7153 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,14 +1,9 @@ { "name": "perf-json-querying", - "version": "1.0.0", + "version": "1.0.1", "lockfileVersion": 1, "requires": true, "dependencies": { - "JSONSelect": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/JSONSelect/-/JSONSelect-0.4.0.tgz", - "integrity": "sha1-oI7cxn6z/L6Z7WMIVTRKDPKCu40=" - }, "JSONStream": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", @@ -37,16 +32,6 @@ "concat-map": "0.0.1" } }, - "cjson": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/cjson/-/cjson-0.2.1.tgz", - "integrity": "sha1-c82KrWXZ4VBfmvF0TTt5wVJ2gqU=" - }, - "colors": { - "version": "0.5.1", - "resolved": "http://registry.npmjs.org/colors/-/colors-0.5.1.tgz", - "integrity": "sha1-fQAj6usVTo7p/Oddy5I9DtFmd3Q=" - }, "compare-at-paths": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/compare-at-paths/-/compare-at-paths-1.0.0.tgz", @@ -85,11 +70,6 @@ "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=" }, - "ebnf-parser": { - "version": "0.1.10", - "resolved": "https://registry.npmjs.org/ebnf-parser/-/ebnf-parser-0.1.10.tgz", - "integrity": "sha1-zR9rpHfFY4xAyX7ZtXLbW6tdgzE=" - }, "es-abstract": { "version": "1.13.0", "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.13.0.tgz", @@ -114,19 +94,21 @@ } }, "escodegen": { - "version": "0.0.21", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-0.0.21.tgz", - "integrity": "sha1-U9ZSz6EDA4gnlFilJmxf/HCcY8M=", - "requires": { - "esprima": "~1.0.2", - "estraverse": "~0.0.4", - "source-map": ">= 0.1.2" + "version": "1.14.3", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz", + "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==", + "requires": { + "esprima": "^4.0.1", + "estraverse": "^4.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1", + "source-map": "~0.6.1" }, "dependencies": { "esprima": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-1.0.4.tgz", - "integrity": "sha1-n1V+CPw7TSbs6d00+Pv0drYlha0=" + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" } } }, @@ -136,14 +118,14 @@ "integrity": "sha1-dqD9Zvz+FU/SkmZ9wmQBl1CxZXs=" }, "estraverse": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-0.0.4.tgz", - "integrity": "sha1-AaCTLf7ldGhKWYr1pnw7+bZCjbI=" + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==" }, "esutils": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", - "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=" + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==" }, "fast-levenshtein": { "version": "2.0.6", @@ -239,36 +221,10 @@ "has-symbols": "^1.0.0" } }, - "jison": { - "version": "0.4.13", - "resolved": "https://registry.npmjs.org/jison/-/jison-0.4.13.tgz", - "integrity": "sha1-kEFwfWIkE2f1iDRTK58ZwsNvrHg=", - "requires": { - "JSONSelect": "0.4.0", - "cjson": "~0.2.1", - "ebnf-parser": "~0.1.9", - "escodegen": "0.0.21", - "esprima": "1.0.x", - "jison-lex": "0.2.x", - "lex-parser": "~0.1.3", - "nomnom": "1.5.2" - }, - "dependencies": { - "esprima": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-1.0.4.tgz", - "integrity": "sha1-n1V+CPw7TSbs6d00+Pv0drYlha0=" - } - } - }, - "jison-lex": { + "js-json-go": { "version": "0.2.1", - "resolved": "https://registry.npmjs.org/jison-lex/-/jison-lex-0.2.1.tgz", - "integrity": "sha1-rEuBXozOUTLrErXfz+jXB7iETf4=", - "requires": { - "lex-parser": "0.1.x", - "nomnom": "1.5.2" - } + "resolved": "https://registry.npmjs.org/js-json-go/-/js-json-go-0.2.1.tgz", + "integrity": "sha512-qtCyJe7NA+CrbbHoUwxJHD6FOuWZKxlr7kgAUBvPtJKjWF9XKn66VgNQL5gI3k1q9xO4g0dJDwhFu9eEdB1PiQ==" }, "json-query": { "version": "2.2.2", @@ -281,20 +237,19 @@ "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=" }, "jsonpath": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/jsonpath/-/jsonpath-1.0.1.tgz", - "integrity": "sha512-HY5kSg82LHIs0r0h9gYBwpNc1w1qGY0qJ7al01W1bJltsN2lp+mjjA/a79gXWuvD6Xf8oPkD2d5uKMZQXTGzqA==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/jsonpath/-/jsonpath-1.1.1.tgz", + "integrity": "sha512-l6Cg7jRpixfbgoWgkrl77dgEj8RPvND0wMH6TwQmi9Qs4TFfS9u5cUFnbeKTwj5ga5Y3BTGGNI28k117LJ009w==", "requires": { "esprima": "1.2.2", - "jison": "0.4.13", "static-eval": "2.0.2", - "underscore": "1.7.0" + "underscore": "1.12.1" } }, "jsonpath-plus": { - "version": "0.18.1", - "resolved": "https://registry.npmjs.org/jsonpath-plus/-/jsonpath-plus-0.18.1.tgz", - "integrity": "sha512-4yQiuV641HROc4z9YGvnsr8yAdmzbu8JjdAen8WfiXsXewKvTG4ie2bSygF2maek9PcbtROmS6aLQs31BD+oNQ==" + "version": "5.0.7", + "resolved": "https://registry.npmjs.org/jsonpath-plus/-/jsonpath-plus-5.0.7.tgz", + "integrity": "sha512-7TS6wsiw1s2UMK/A6nA4n0aUJuirCVhJ87nWX5je5MPOl0z5VTr2qs7nMP8NZ2ed3rlt6kePTqddgVPE9F0i0w==" }, "levn": { "version": "0.3.0", @@ -305,11 +260,6 @@ "type-check": "~0.3.2" } }, - "lex-parser": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/lex-parser/-/lex-parser-0.1.4.tgz", - "integrity": "sha1-ZMTwJfF/1Tv7RXY/rrFvAVp0dVA=" - }, "libnested": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/libnested/-/libnested-1.4.1.tgz", @@ -341,22 +291,6 @@ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" }, - "nomnom": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/nomnom/-/nomnom-1.5.2.tgz", - "integrity": "sha1-9DRUSKhTz71cDSYyDyR3qwUm/i8=", - "requires": { - "colors": "0.5.x", - "underscore": "1.1.x" - }, - "dependencies": { - "underscore": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.1.7.tgz", - "integrity": "sha1-QLq4S60Z0jAJbo1u9ii/8FXYPbA=" - } - } - }, "object-inspect": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.6.0.tgz", @@ -368,9 +302,9 @@ "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" }, "oboe": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/oboe/-/oboe-2.1.4.tgz", - "integrity": "sha1-IMiM2wwVNxuwQRklfU/dNLCqSfY=", + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/oboe/-/oboe-2.1.5.tgz", + "integrity": "sha1-VVQoTFQ6ImbXo48X4HOCH73jk80=", "requires": { "http-https": "^1.0.0" } @@ -384,16 +318,16 @@ } }, "optionator": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", - "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", "requires": { "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.4", + "fast-levenshtein": "~2.0.6", "levn": "~0.3.0", "prelude-ls": "~1.1.2", "type-check": "~0.3.2", - "wordwrap": "~1.0.0" + "word-wrap": "~1.2.3" } }, "path-is-absolute": { @@ -431,14 +365,14 @@ } }, "pull-stream": { - "version": "3.6.11", - "resolved": "https://registry.npmjs.org/pull-stream/-/pull-stream-3.6.11.tgz", - "integrity": "sha512-43brwtqO0OSltctKbW1mgzzKH4TNE8egkW+Y4BFzlDWiG2Ayl7VKr4SeuoKacfgPfUWcSwcPlHsf40BEqNR32A==" + "version": "3.6.14", + "resolved": "https://registry.npmjs.org/pull-stream/-/pull-stream-3.6.14.tgz", + "integrity": "sha512-KIqdvpqHHaTUA2mCYcLG1ibEbu/LCKoJZsBWyv9lSYtPkJPBq8m3Hxa103xHi6D2thj5YXa0TqK3L3GUkwgnew==" }, "readable-stream": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.3.0.tgz", - "integrity": "sha512-EsI+s3k3XsW+fU8fQACLN59ky34AZ14LoeVZpYwmZvldCFo0r0gnelwF2TcMjLor/BTL5aDJVBMkss0dthToPw==", + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", "requires": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -462,20 +396,20 @@ } }, "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" }, "source-map": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "optional": true }, "split2": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/split2/-/split2-3.1.1.tgz", - "integrity": "sha512-emNzr1s7ruq4N+1993yht631/JH+jaj0NYBosuKmLcq+JkGQ9MmTw1RB1fGaTCzUuseRIClrlSLHRNYGwWQ58Q==", + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/split2/-/split2-3.2.2.tgz", + "integrity": "sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==", "requires": { "readable-stream": "^3.0.0" } @@ -486,36 +420,6 @@ "integrity": "sha512-N/D219Hcr2bPjLxPiV+TQE++Tsmrady7TqAJugLy7Xk1EumfDWS/f5dtBbkRCGE7wKKXuYockQoj8Rm2/pVKyg==", "requires": { "escodegen": "^1.8.1" - }, - "dependencies": { - "escodegen": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.11.1.tgz", - "integrity": "sha512-JwiqFD9KdGVVpeuRa68yU3zZnBEOcPs0nKW7wZzXky8Z7tffdYUHbe11bPCV5jYlK6DVdKLWLm0f5I/QlL0Kmw==", - "requires": { - "esprima": "^3.1.3", - "estraverse": "^4.2.0", - "esutils": "^2.0.2", - "optionator": "^0.8.1", - "source-map": "~0.6.1" - } - }, - "esprima": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz", - "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=" - }, - "estraverse": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", - "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=" - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "optional": true - } } }, "string.prototype.trim": { @@ -529,11 +433,11 @@ } }, "string_decoder": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.2.0.tgz", - "integrity": "sha512-6YqyX6ZWEYguAxgZzHGL7SsCeGx3V2TtOTqZz1xSTSWnqsbWwbptafNyvf/ACquZUXV3DANr5BDIwNYe1mN42w==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", "requires": { - "safe-buffer": "~5.1.0" + "safe-buffer": "~5.2.0" } }, "tape": { @@ -575,19 +479,19 @@ "integrity": "sha1-yIgvobsQksBgBal/NO9chQjjZk4=" }, "underscore": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.7.0.tgz", - "integrity": "sha1-a7rwh3UA02vjTsqlhODbn+8DUgk=" + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.12.1.tgz", + "integrity": "sha512-hEQt0+ZLDVUMhebKxL4x1BTtDY7bavVofhZ9KZ4aI26X9SRaE+Y3m83XUL1UP2jn8ynjndwCCpEHdUG+9pP1Tw==" }, "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" }, - "wordwrap": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", - "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=" + "word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==" }, "wrappy": { "version": "1.0.2", diff --git a/package.json b/package.json index be1883e..b040a07 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "perf-json-querying", - "version": "1.0.0", + "version": "1.0.1", "description": "", "main": "index.js", "scripts": { @@ -11,12 +11,13 @@ "license": "MIT", "dependencies": { "JSONStream": "^1.3.5", + "js-json-go": "^0.2.1", "json-query": "^2.2.2", - "jsonpath": "^1.0.1", - "jsonpath-plus": "^0.18.1", + "jsonpath": "^1.1.1", + "jsonpath-plus": "^5.0.7", "map-filter-reduce": "^3.2.2", - "oboe": "^2.1.4", - "pull-stream": "^3.6.11", - "split2": "^3.1.1" + "oboe": "^2.1.5", + "pull-stream": "^3.6.14", + "split2": "^3.2.2" } } diff --git a/src/index.js b/src/index.js index 23c5275..3a6ab40 100644 --- a/src/index.js +++ b/src/index.js @@ -4,6 +4,7 @@ const performanceClasses = { 'json-query': require('./queriers/json-query'), 'jsonpath-plus': require('./queriers/jsonpath-plus'), jsonpath: require('./queriers/jsonpath'), + 'js-json-go': require('./queriers/js-json-go'), JSONStream: require('./queriers/JSONStream'), oboe: require('./queriers/oboe'), 'map-filter-reduce': require('./queriers/map-filter-reduce') @@ -114,6 +115,7 @@ const testLibraries = [ 'json-query', 'jsonpath-plus', 'jsonpath', + 'js-json-go', 'JSONStream', 'oboe', 'map-filter-reduce' diff --git a/src/queriers/js-json-go.js b/src/queriers/js-json-go.js new file mode 100644 index 0000000..809ecd2 --- /dev/null +++ b/src/queriers/js-json-go.js @@ -0,0 +1,21 @@ +const jg = require('js-json-go') +const CityLotsORM = require('./base-class') + +class JsonPathCity extends CityLotsORM { + execute(query) { + return jg.getAll(this.data, query) + } + shallow() { + return this.execute('features[*].properties') + } + deep() { + return this.execute('features[*].properties.BLOCK_NUM') + } + conditional() { + return this.execute( + 'features[{$.properties.STREET = UNKNOWN}].properties.BLOCK_NUM' + ) + } +} + +module.exports = JsonPathCity