jsonpathc#-6.0system.text.jsonjson-everything

Can't get the desired properties via JsonPath evaluate method


I have a json schema that marks special properties in need of processing and I want to query those via JsonPath.Evaluate.

Here's a part of the schema to illustrate the issue

{
    "type": "object",
    "properties": {
        "period": {
            "description": "The period in which the rule applies",
            "type": "object",
            "properties": {
                "start": {
                    "type": "string",
                    "format": "date-time"
                },
                "end": {
                    "type": "string",
                    "format": "date-time"
                }
            },
            "required": [
                "start"
            ],
            "x-updateIndicatorProperties": [
                "start"
            ]
        },
        "productType": {
            "type": "string"
        },
        "x-updateIndicatorProperties": [
            "productType"
        ]
    }
}

I want to get the the JsonPath of the "x-updateIndicatorProperties" properties, so that I can then query the actual properties to process. For this example, the expected result would be

[
  "$['properties']['x-updateIndicatorProperties']",
  "$['properties']['period']['x-updateIndicatorProperties']"
]

I've been trying for a while to get a JsonPath expression that would query these properties. Currently I'm just iterating all properties and filter them manually : "$..*"

I've also tried using : $..['x-updateIndicatorProperties']

This works. But it returns a lot of duplicates. For the example above, I get 5 results instead of the expected 2. Can be demonstrated here : https://json-everything.net/json-path enter image description here

Assuming I can't influence the schema itself, only the code that traverses it, can anybody help with an expression to get the expected results or any other way to achieve the same outcome?

The stack is JsonPath 0.2.0, .net 6 and system.text.json.


Solution

  • This was a bug in the library when parsing paths that use a recursive descent (..) into a quoted-property-name selector (['foo']). So it would happen for any path in the form $..['foo'].

    I've fixed the issue and released version 0.2.1.