Christian Demers
Christian Demers

Reputation: 25

Unable to properly Transform nested array with JOLT

I'm trying to convert json nested array's element and unable to get expected result, either I properly get name element or schemaExtensions element but can't get both together.

Here is my input:

{
  "rows": [
    {
      "content": {
        "name": {
          "content": "User"
        },
        "schemaExtensions": {
          "content": [
            {
              "content": {
                "schema": {
                  "content": "User"
                },
                "required": {
                  "content": true
                }
              }
            }
          ]
        }
      }
    }
  ]
}

And the JOlt spec definition:

  [
    {
      "operation": "shift",
      "spec": {
        "rows": {
          "*": {
            "content": {
              "name": {
                "content": "[&3].name"
              },
              "schemaExtensions": {
                "content": {
                  "*": {
                    "content": {
                      "schema": {
                        "content": "schemaExtensions.[&7].schema"
                      },
                      "required": {
                        "content": "schemaExtensions.[&7].required"
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
]

The expected result:

[ {
  "name" : "User",
  "schemaExtensions": [ {
       "schema":"User",
       "required":true
    }]
}]

Here is the result I got when having both in my spec

[ {
  "name" : "User"
} ]

And if I remove name from my spec, then I get my schemaExtensions properly:

{
  "schemaExtensions" : [ {
    "schema" : "urn:ietf:params:scim:schemas:extension:enterprise:2.0:User",
    "required" : true
  } ]
}

Upvotes: 1

Views: 376

Answers (2)

Barbaros Özhan
Barbaros Özhan

Reputation: 65105

You can start with three level nesting to roam before writing the branches(name&schemaExtensions) explicitly. No need to write other key names such as

[
  {
    "operation": "shift",
    "spec": {
      "*": {
        "*": {
          "*": {
            "name": { "*": "&1" },
            "schemaExtensions": {
              "*": {
                "*": { "*": { "*": { "*": "&5.&1" } } }
              }
            }
          }
        }
      }
    }
  }
]

Upvotes: 1

Arun Sai
Arun Sai

Reputation: 1972

 [
      {
        "operation": "shift",
        "spec": {
          "rows": {
            "*": {
              "content": {
                "name": {
                  "content": "[].name"
                },
                "schemaExtensions": {
                  "content": {
                    "*": {
                      "content": {
                        "schema": {
                          "content": "[&7].schemaExtensions[&7].schema"
                        },
                        "required": {
                          "content": "[&7].schemaExtensions[&7].required"
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
        }
    ]

Upvotes: 0

Related Questions