Aleeb
Aleeb

Reputation: 45

JSONPath to get multiple values from nested json

I have a nested JSON in a field that contains multiple important keys that I would like to retrieve as an array:

{
  "tasks": [
    {
      "id": "task_1",
      "name": "task_1_name",
      "assignees": [
        {
          "id": "assignee_1",
          "name": "assignee_1_name"
        }
      ]
    },
    {
      "id": "task_2",
      "name": "task_2_name",
      "assignees": [
        {
          "id": "assignee_2",
          "name": "assignee_2_name"
        },
        {
          "id": "assignee_3",
          "name": "assignee_3_name"
        }
      ]}]}

All the queries that I've tried so far fx ( $.tasks.*.assignees..id) and many others have returned

[
  "assignee_1",
  "assignee_2",
  "assignee_3"
]

But what I need is:

[
  ["assignee_1"],
  ["assignee_2", "assignee_3"]
]

Is it possible to do with JSONPath or any script inside of it, without involving 3rd party tools?

Upvotes: 3

Views: 12596

Answers (1)

gregsdennis
gregsdennis

Reputation: 8428

The problem you're facing is that tasks and assignees are arrays. You need to use [*] instead of .* to get the items in the array. So your path should look like

$.tasks[*].assignees[*].id

You can try it at https://json-everything.net/json-path.

NOTE The output from my site will give you both the value and its location within the original document.

Edit

(I didn't read the whole thing :) )

You're not going to be able to get

[
  ["assignee_1"],
  ["assignee_2", "assignee_3"]
]

because, as @Tomalak mentioned, JSON Path is a query language. It's going to remove all structure and return only values.

Upvotes: 3

Related Questions