Как удалить последнюю запятую в каждом l oop в Wiremock - PullRequest
1 голос
/ 06 августа 2020

Мне нужно написать заглушку для запроса, который будет выглядеть примерно так:

[
    { "todo_id": 1 },
    { "todo_id": 2 }
]

Количество объектов todo в запросе может варьироваться.

Мой ответ в настоящее время выглядит так: это:

"response": {
    "status": 200,
    "body": "[ {{#each (jsonPath request.body '$') as |todo|}}
                   { \"todo_id\": {{todo.todo_id}} },
               {{/each}}
             ]"
}

Обратите внимание, что я растянул тело, чтобы сделать его более читабельным, в самом заглушке все это в одной строке.

Итак, моя проблема в том, что мне нужно запятая после моего объекта todo в случае, если в запросе передано более одного объекта. Однако при этом последний объект также остается с запятой, поэтому, если вышеупомянутый запрос был отправлен, это будет ответ:

[
    { "todo_id": 1 },
    { "todo_id": 2 },
]

Эта последняя запятая приводит к отказу метода .json() в приложении Python, которое необходимо прочитать ответы из этой заглушки WireMock.

Есть мысли о том, как избавиться от последней запятой? Я думал, что, возможно, у запятой есть условие eq и проверяю, совпадает ли текущая переменная todo с {{jsonPath request.body '$.[-1]'}}, но написать это так:

{{#eq todo {{jsonPath request.body '$.[-1]'}} }}

тоже не сработало.

Мы будем очень признательны за любые предложения по избавлению от последней запятой. Спасибо :)

1 Ответ

1 голос
/ 08 августа 2020

Получил ответ на этот вопрос в группах Google.

Можно использовать @last в каждом l oop, чтобы определить, когда вы находитесь на последнем элементе, например:

{{#each (jsonPath request.body '$.things') as |thing|}}
  {{#if @last}}
    { "thing": {{{thing}}} }
  {{else}}
    { "thing": {{{thing}}} },
  {{/if}}
{{/each}}
...