Экранирующий символ для квадратных скобок в свойстве json аннотации php swagger

Я пишу API на Php Laravel и использую аннотации swagger (2.0) (lib: darkaonline/l5-swagger которые используют swagger-php) для создания swagger.json, однако у меня есть следующая проблема - когда Я печатаю:

/**
 *
 * Space Schema
 *
 * @SWG\Get(
 *     path="/api/v1/client/space/schema",
 *     @SWG\Response( 
 *        response=200, 
 *        description="OK",
 *        @SWG\Property(property="result", type="json", example={ "aa": [ "bb", "cc" ] }  )
 *      )
 * )

И попробуйте сгенерировать swagger.json, я получаю:

[Syntax Error] Expected PlainValue, got '[' in ...

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

@SWG\Property(property="result", type="json", example={ "ee": "ff" })

То все в порядке. Однако мне нужно использовать квадратные скобки, поэтому вопрос:

Что такое escape-символ для [ (квадратная скобка) в строке json в аннотациях swagger?

Я также хочу добавить, что мой пример json довольно большой и сложный.


person Kamil Kiełczewski    schedule 30.11.2017    source источник


Ответы (2)


Я случайно нашел лучшее решение:

Измените квадратные скобки ([ и ]) в:

@SWG\Property(property="result", type="json", example={ "aa": [ "bb", "cc" ] }  )

в фигурные скобки ({ и }):

@SWG\Property(property="result", type="json", example={ "aa": { "bb", "cc" } }  )

Как видите, мы используем фигурные скобки, однако мы не используем соглашение ключ: значение (только ключи), поэтому swagger может обнаруживать массив.

введите описание изображения здесь

И у нас есть хороший и простой отформатированный json в swagger-ui :)

person Kamil Kiełczewski    schedule 30.11.2017

Я нашел обходной путь, который не удовлетворяет на 100%, однако я приведу его здесь:

Изменять

@SWG\Property(property="result", type="json", example={ "aa": [ "bb", "cc" ] }  )

to:

@SWG\Property(property="result", type="json", example="{ ""aa"": [ ""bb"", ""cc"" ] }" )

Вы можете использовать это регулярное выражение для преобразования кавычек в json.

Если у вас возникли проблемы, вы также можете изменить type="json" на

type="string", format="json"

однако будьте очень осторожны с этим, потому что вы меняете определение результата API...

Недостатком этого решения является то, что в swagger-ui вы не получите красиво отформатированный json но строка с удвоенным "" однако, если вы нажмете «Модель», то дублирование исчезнет, ​​и разработчик сможет скопировать пример json

введите здесь описание изображения

person Kamil Kiełczewski    schedule 30.11.2017