Skip to content
New issue

Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? # to your account

Square brackets & double quotes in keys #189

Open
sachingodishela opened this issue Mar 13, 2024 · 0 comments
Open

Square brackets & double quotes in keys #189

sachingodishela opened this issue Mar 13, 2024 · 0 comments

Comments

@sachingodishela
Copy link

Goal

I have an input json like this ⬇️ and I want the pathExpression of the key whose value is tenth.

{
  "name": "my integration",
  "settings": {
     "id": "first",
      "name": "second",
      "age": "third",
      "a.b": "fourth",
      "a": {
	    "b": "fifth"
      },
      "6nine": "sixth",
      ".": "seventh",
      "10": "eighth",
      "[square with space]": "ninth",
      "double \"quote\" with space": "tenth",
      "[square] and \"double\" quote with space ": "eleventh",
      "[\"quote inside square\"]": "twelfth"
  }
}

Attempt 1

jp.value(o, '$["settings"]["double \"quote\" with space"]')

Threw the follwing error:

Uncaught Error: Parse error on line 1:
...settings"]["double "quote" with space"]
-----------------------^
Expecting ']', ',', got 'IDENTIFIER'
    at Parser.parseError (/Users/sachin/io/integrator/node_modules/jsonpath/generated/parser.js:166:15)
    at Parser.parser.yy.parseError (/Users/sachin/io/integrator/node_modules/jsonpath/lib/parser.js:13:17)
    at Parser.parse (/Users/sachin/io/integrator/node_modules/jsonpath/generated/parser.js:224:22)
    at JSONPath._normalize (/Users/sachin/io/integrator/node_modules/jsonpath/lib/index.js:198:24)
    at JSONPath.stringify (/Users/sachin/io/integrator/node_modules/jsonpath/lib/index.js:168:15)
    at JSONPath.value (/Users/sachin/io/integrator/node_modules/jsonpath/lib/index.js:63:31)

Attempt 2

jp.value(o, "$['settings']['double \"quote\" with space']")

Returned

undefined

Attempt 3

I generated the pathExpression like this:

jp.paths(o, '$..*')
/** Prints this:
[
  [ '$', 'name' ],
  [ '$', 'settings' ],
  [ '$', 'arr' ],
  [ '$', 'settings', '10' ],
  [ '$', 'settings', 'id' ],
  [ '$', 'settings', 'name' ],
  [ '$', 'settings', 'age' ],
  [ '$', 'settings', 'a.b' ],
  [ '$', 'settings', 'a' ],
  [ '$', 'settings', '6nine' ],
  [ '$', 'settings', '.' ],
  [ '$', 'settings', '[square with space]' ],
  [ '$', 'settings', 'double "quote" with space' ],   <------------------------ path of interest
  [ '$', 'settings', '[square] and "double" quote with space ' ],
  [ '$', 'settings', '["quote inside square"]' ],
  [ '$', 'settings', 'a', 'b' ],
  [ '$', 'arr', 0 ],
  [ '$', 'arr', 1 ]
]
*/
jp.stringify(o, [ '$', 'settings', 'double "quote" with space' ])
/** Prints this:
'$.settings["double \\"quote\\" with space"]'    <-------------------------- required path expression (we achieved our goal)
*/

But wait.. If this path expression corresponds to the node with value tenth, then the below expression should output tenth:

jp.value(o, '$.settings["double \\"quote\\" with space"]')
/**
prints undefined
*/

From attempt 3, it seems to me that there is a limitation when square brackets or double quotes are involved in keys. If that is not the case, any help is appreciated.

# for free to join this conversation on GitHub. Already have an account? # to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant