AVG all keys of an array of objects

Hi all,

I need to average all keys of an array of objects like this:

[{"a":-5736,"b":6436,"c":15888,"d":32700,"e":18338},{"a":-5736,"b":6436,"c":15888,"d":32700,"e":18338},{"a":-5738,"b":6436,"c":15888,"d":32700,"e":18340},{"a":-5743,"b":6436,"c":15884,"d":32700,"e":18337},{"a":-5742,"b":6436,"c":15888,"d":32700,"e":18338}]

How can I do this in JASONata?
Number of different keys will be unknown/dynamic in later apllication.

See:

So the JSONata expression:

(payload~>$keys()).(
    $key := $;
    { $key : $$.payload~>$lookup($key)~>$average()
    }
)~>$merge()

I am assuming that the array is stored in payload.

So it produces following output:

{
  "a": -5739,
  "b": 6436,
  "c": 15887.2,
  "d": 32700,
  "e": 18338.2
}

for input message:


{ "payload" : [
  {
    "a": -5736,
    "b": 6436,
    "c": 15888,
    "d": 32700,
    "e": 18338
  },
  {
    "a": -5736,
    "b": 6436,
    "c": 15888,
    "d": 32700,
    "e": 18338
  },
  {
    "a": -5738,
    "b": 6436,
    "c": 15888,
    "d": 32700,
    "e": 18340
  },
  {
    "a": -5743,
    "b": 6436,
    "c": 15884,
    "d": 32700,
    "e": 18337
  },
  {
    "a": -5742,
    "b": 6436,
    "c": 15888,
    "d": 32700,
    "e": 18338
  }
]
}
1 Like

Wow! Thanks!
I think I never got this solution on my own.. :thinking:

I have broken down the problem in 3 steps:

  1. construct an array of keys.
  2. transform this into an array of { key : average for that key } objects
  3. merge this array into json object

Using the jonata exerciser you just have to delete some part of the expression to see how it works.

1 Like

This topic was automatically closed 14 days after the last reply. New replies are no longer allowed.