SELECT id,
       array_to_json(array_remove(array_agg(a), NULL)) as a,
       array_to_json(array_remove(array_agg(b), NULL)) as b,
       array_to_json(array_remove(array_agg(c), NULL)) as c
FROM (
         SELECT jsonb_path_query_first(value, '$[*].id') as id,
                jsonb_path_query(value, '$[*].a') as a,
                jsonb_path_query(value, '$[*].b') as b,
                jsonb_path_query(value, '$[*].c') as c
         FROM (
                  SELECT jsonb_array_elements('[
                    [
                      {
                        "id": "1"
                      },
                      {
                        "a": "a"
                      },
                      {
                        "b": "b"
                      },
                      {
                        "a": "a"
                      },
                      {
                        "b": "b"
                      },
                      {
                        "c": "c"
                      }
                    ],
                    [
                      {
                        "id": "2"
                      },
                      {
                        "a": "a"
                      },
                      {
                        "b": "b"
                      },
                      {
                        "a": "a"
                      },
                      {
                        "b": "b"
                      },
                      {
                        "b": "b"
                      }
                    ]
                  ]'::jsonb) as value
              ) AS objects
     ) AS objects
GROUP BY id;