JSONPath-Plus / JSONPath

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

Feature Request: Enhance Syntax for Picking Specific Fields #188

Open nitaiaharoni1 opened 1 year ago

nitaiaharoni1 commented 1 year ago

Motivation

Ability to select multiple fields from an object in one query.

Current behavior

Currently, to select multiple fields from an object, the user needs to run multiple queries or process the result of a more general query. For example, given the following JSON:

{
  "data": {
    "items": [
      {
        "data": {
          "name": "Apple",
          "color": "red",
          "weight": "150g"
        }
      },
      {
        "data": {
          "name": "Banana",
          "color": "yellow",
          "weight": "120g"
        }
      }
    ]
  }
}

To get the name and color of each item, the user would need to run separate queries for each field: $.data.items[*].data.name and $.data.items[*].data.color.

Desired behavior

The proposal is to introduce a field picking syntax to select multiple fields from an object in one query. For instance, using the following syntax: $.data.items[*].data.{name, color}. With this, the desired output would be:

[
  { name: 'Apple', color: 'red' },
  { name: 'Banana', color: 'yellow' }
]

This would greatly simplify the process of extracting specific fields from JSON data.

Alternatives considered

An alternative could be to continue using multiple queries or to use a more general query and then process the result. However, this can become cumbersome when dealing with large JSON objects or when needing to extract multiple fields.

callumgare commented 1 year ago

I would also love this! There is already a syntax that is used by a couple of other parses so I think it makes most sense to use that syntax: https://cburgmer.github.io/json-path-comparison/results/parens_notation.html

callumgare commented 1 year ago

Actually it looks like this ticket is a duplicate of https://github.com/JSONPath-Plus/JSONPath/issues/153 so maybe this ticket should be closed and I'll stick my other comment there