JSONPath-Plus / JSONPath

A fork of JSONPath from http://goessner.net/articles/JsonPath/
Other
963 stars 169 forks source link

Quoted subscript can not work will with union/or subscripts. #159

Open nielinjie opened 2 years ago

nielinjie commented 2 years ago

Describe the bug

escape with quoted subscript can not work will with union/or subscripts.

Code sample or steps to reproduce

//PASS
test.only("some path with OR subscripts", () => {
  const obj = { functions: { foo: { io: "foo" }, bar: { out: "bar" } } };
  const jsonp = "$..[io,out]";
  const paths = jp.paths(obj, jsonp);
  expect(paths).toEqual([
    ["$", "functions", "foo", "io"],
    ["$", "functions", "bar", "out"],
  ]);
});
//PASS
test.only("some path with ESCAPE", () => {
  const obj = { functions: { foo: { "io.nest": "foo" }, bar: { out: "bar" } } };
  const jsonp = "$..['io.nest']";
  const paths = jp.paths(obj, jsonp);
  expect(paths).toEqual([
    ["$", "functions", "foo", "io.nest"],
  ]);
});
//FAILED
test.only("some path with ESCAPE and OR subscripts", () => {
  const obj = { functions: { foo: { 'io.nest': "foo" }, bar: { out: "bar" } } };
  const jsonp = "$..['io.nest',out]";
  const paths = jp.paths(obj, jsonp);
  expect(paths).toEqual([
    ["$", "functions", "foo", "io.nest"],
    ["$", "functions", "bar", "out"],
  ]);
});

Console error or logs

Expected behavior

All test case above should pass.

Expected result

Environment (IMPORTANT)

Desktop**

brettz9 commented 2 years ago

The project is not really being actively maintained, but you'd have a better chance I think if your code sample worked for this library. The API you are using in your sample does not match this project.

nielinjie commented 2 years ago

Sorry,I should mentioned that jp.paths in codes is just a help function for this:

import { JSONPath } from "jsonpath-plus";
const jp = {
  paths: (obj: any, path: string) => {
    return JSONPath({ path, json: obj, resultType: "path" }).map(
      JSONPath.toPathArray
    );
  },