Как группировать объекты json в WSO2 ESB?

У меня есть этот ответ json:

{
  "field": [
    {
      "id": 26,
      "name": "tom",
      "email": "[email protected]"
    },
    {
      "id": 11,
      "name": "lisa",
      "email": "[email protected]"
    },
    {
      "id": 11,
      "name": "hi",
      "email": "[email protected]"
    }
  ]
}

Я хочу сгруппировать его по идентификатору и преобразовать следующим образом:

{
  26: [{
  name: " tom",
  email: "[email protected]",

}],
  11: [{
 name: "lisa"
  email: "[email protected]"};
{
 name: "hi"
  email: "[email protected]"}

}]
}

Я должен использовать Wso2esb для этого, я пытаюсь использовать скрипт-посредник, и это возвращает ошибку, пожалуйста, кто-нибудь может помочь?


person Asma Alghamdi    schedule 19.05.2020    source источник


Ответы (1)


Самый простой вариант, который вы можете использовать для этого, — медиатор отображения данных. Вы можете выполнить сопоставление JSON-JSON, чтобы выполнить ваше требование. Для настройки картографа данных необходимо использовать интеграционную студию [1]. Для средства отображения данных вам необходимо предоставить образец входных данных, образец файла выходных данных. Затем это можно графически отобразить в студии интеграции. Пожалуйста, обратитесь к документации [2], чтобы уточнить это.

[1]-https://wso2.com/integration/integration-studio/ [ 2]-https://docs.wso2.com/display/ESB500/Data+Mapper+Mediator

person Shanaka Premarathna    schedule 20.05.2020
comment
Большое спасибо, Шанака Премаратна, я использую эту опцию, но столкнулся с проблемой: на выходе печатается последний объект в массиве, как сделать так, чтобы он печатал все объекты по идентификатору? - person Asma Alghamdi; 31.05.2020
comment
можете ли вы поделиться конфигурациями Synapse, используемыми в вашей среде - person Shanaka Premarathna; 31.05.2020
comment
{$schema:http:\/\/wso2.org\/json-schema\/wso2-data-mapper-v5.0.0\/schema#,inputType:JSON,id:,title:sending,type:object,properties :{field:{id:,type:array,items:[{id:\/0,type:object,properties:{email:{id:null\/0,type:string},id:{id:null \/0,тип:число},имя:{id:null\/0,тип:строка}}}]}}} - person Asma Alghamdi; 31.05.2020
comment
{$schema:http:\/\/wso2.org\/json-schema\/wso2-data-mapper-v5.0.0\/schema#,outputType:JSON,id:,title:sending,type:object,properties :{поле:{id:,тип:массив,элементы:[{id:\/0,тип:объект,свойства:{id:{id:,тип:массив,элементы:[{id:\/0,тип :объект,значение:{тип:номер},свойства:{адрес электронной почты:{id:null\/0,тип:строка},имя:{id:null\/0,тип:строка}}}]}}}] }}} - person Asma Alghamdi; 31.05.2020
comment
это вывод, он печатает последний объект: {поле: [ {id: [ { _ELEMVAL: 11, имя: привет, электронная почта: [email protected] } ] } ] } - person Asma Alghamdi; 31.05.2020
comment
Анализируя вывод JSON, который вы ожидаете в поднятой проблеме, я заметил, что это недопустимый JSON. Можете ли вы изменить файл JSON на действительный JSON========{ 26: [{ имя: tom, адрес электронной почты: [email protected], }], 11: [{ имя: lisa адрес электронной почты: ss@hotmail .com}; {имя: привет электронная почта: [email protected]} }] } - person Shanaka Premarathna; 31.05.2020
comment
Я изменяю файл json, как вы сказали, но все равно печатаю последний объект, я думаю, что это нужно для цикла в файле .dmc, я пытаюсь добавить цикл for и классифицировать объекты по идентификатору, но мой код не работает, есть идеи для редактирования .dmc ? Спасибо - person Asma Alghamdi; 01.06.2020
comment
Это файл .dmc: for(i_field_1d3861bd_c355_45b8_9b7e_5eb52941ba97 в inputroot.field){ outputroot.field[0] = {}; outputroot.field[0].id = []; outputroot.field[0].id[0] = {}; outputroot.field[0].id[0]._ELEMVAL = inputroot.field[i_field_1d3861bd_c355_45b8_9b7e_5eb52941ba97].id; outputroot.field[0].id[0].name = inputroot.field[i_field_1d3861bd_c355_45b8_9b7e_5eb52941ba97].name; outputroot.field[0].id[0].email = inputroot.field[i_field_1d3861bd_c355_45b8_9b7e_5eb52941ba97].email; count_i_field_1d3861bd_c355_45b8_9b7e_5eb52941ba97++; } вернуть выходной корень; }; - person Asma Alghamdi; 01.06.2020
comment
{поле: [ { 26: [{ имя: Том, электронная почта: [email protected], }], 11: [{ имя: Лиза электронная почта: [email protected]}; {имя: привет, электронная почта: [email protected]} }]]} } 26 и 11 - это идентификатор, который не является фиксированным - person Asma Alghamdi; 01.06.2020
comment
Это все еще недопустимый JSON. Можете ли вы использовать онлайн-инструмент, например, для проверки этого.jsonformatter.curiousconcept.com и создать действительный JSON - person Shanaka Premarathna; 01.06.2020
comment
{поле: [ 26, [{имя: tom, электронная почта: [email protected], }], 11, [{имя: lisa, электронная почта: [email protected]}, {имя: привет, электронная почта: ss@hotmail .com} ]] } Группировка объектов по идентификатору - person Asma Alghamdi; 01.06.2020
comment
Кажется, что на данный момент у нас нет возможности автоматически генерировать входную схему, когда в массивах есть массивы. Вам нужно будет вручную отредактировать файл .dmc, чтобы создать сопоставление - person Shanaka Premarathna; 24.06.2020
comment
Большое спасибо, Шанака, да, я отредактировал файл .dmc, и он работает, мой код: results = result.field; группы = {}; for (var i в результатах) { var groupName = results[i].id; if (!groups[results[i].id]) { groups[groupName] = []; } groups[имя_группы].push({name :results[i].name,email:results[i].email}) } console.log(groups); - person Asma Alghamdi; 25.06.2020