Посредник WSO2, который удаляет определенные вхождения JSONobject в массиве JSON - PullRequest
0 голосов
/ 13 октября 2019

я впервые преобразовываю ответ массивами json в wso2. Я создаю посредник оттока wso2, который удаляет конкретный объект json в ответе массива json

Используя посредник с полезной последовательностью, я пытался удалить объект json "цена" из массивов json. Я следовал документации по wso2, но в ее эфире я получаю пустой ответ тела или wso2 отклоняет последовательность оттока.

пример ответа:

{
  "results": [
    {
      "name": "user",
      "item": "test",
      "price": {
        "pricePerItem": 2.0,
        "currency": "USD"
      },
      "stat": {
        "groupId": 3,
        "groupName": "DELIVERED",
      }
    },
    {
      "name": "user2",
      "item": "test2",
      "price": {
        "pricePerItem": 4.0,
        "currency": "USD"
      },
      "stat": {
        "groupId": 4,
        "groupName": "DELIVERED",
      }
    }
    ]
}

мой код оттока:

<?xml version="1.0" encoding="UTF-8"?>
<sequence name="test_outflow.xml" trace="disable" xmlns="http://ws.apache.org/ns/synapse">
  <payloadFactory media-type="json">
        <format>
                $1
        </format>
        <args>
            <arg evaluator="json" expression="$.results"/>
        </args>
</payloadFactory>
 <script language="js"><![CDATA[
    var payload = mc.getPayloadJSON();
    results = payload.results;
    response = new Array();
           for (i = 0; i &lt; results.length; ++i) {
           delete payload[i].id;
           response[i] = l;
           }
           mc.setPayloadJSON(response);
           ]]></script>
 <property name="messageType" scope="axis2" type="STRING" value="application/json"/>
</sequence>

ожидаемые результаты:

{
  "results": [
    {
      "name": "user",
      "item": "test",
      "stat": {
        "groupId": 3,
        "groupName": "DELIVERED",
      }
    },
    {
      "name": "user2",
      "item": "test2",
      "stat": {
        "groupId": 4,
        "groupName": "DELIVERED",
      }
    }
    ]
}

Если у кого-либо из вас есть опытс такой ситуацией? спасибо!

1 Ответ

0 голосов
/ 13 октября 2019

Вы можете использовать следующий встроенный скрипт, чтобы выполнить ваше требование

<script language="js" xmlns="http://ws.apache.org/ns/synapse"><![CDATA[
    var payload = mc.getPayloadJSON();
    var results = payload.results;
    var response = new Array();
    for (var i = 0; i < results.length; ++i) {
        delete results[i].price;
        response[i] = results[i];
    }
    payload.results = response;
    mc.setPayloadJSON(payload);
]]></script>

Ниже приведен пример последовательности (синапс), разработанный для следующего требования макета

ActualОтвет (до мода):

{
  "results": [
    {
      "name": "Athiththan",
      "price": {
        "value": 120
      }
    },
    {
      "name": "athiththan11",
      "price": {
        "value": 100
      }
    }
  ]
}

Исключенный ответ (после мода):

{
  "results": [
    {
      "name": "Athiththan"
    },
    {
      "name": "athiththan11"
    }
  ]
}

Конфигурация синапса Out Sequence:

<?xml version="1.0" encoding="UTF-8"?>
<outSequence xmlns="http://ws.apache.org/ns/synapse">
    <script language="js"><![CDATA[
        var payload = mc.getPayloadJSON();
        var results = payload.results;
        var response = new Array();
        for (var i = 0; i < results.length; ++i) {
            delete results[i].price;
            response[i] = results[i];
        }
        payload.results = response;
        mc.setPayloadJSON(payload);
    ]]></script>
    <send/>
</outSequence>
...