Как я могу настроить Pretty_Printed JSON в PHP 7.x? - PullRequest
0 голосов
/ 23 января 2020
Встроенная

PHP PRETTY_PRINT не допускает особых настроек, кроме нескольких дополнительных флагов:

  • JSON_UNESCAPED_SLASHES
  • JSON_UNESCAPED_UNICODE

Но вид настройки, который я ищу, это тот, который преобразует отображаемое JSON, так что в итоге он выглядит так:

  • меньше по горизонтали
    • Отступы с двумя пробелами вместо 4
  • более вертикальные
    • переводы строк в начале массивов и объектов
    • переводы строк между массивами и объектами одного уровня
    • переводы строк между записями одного уровня

Таким образом, вместо разнесенных по горизонтали:

[
    {
        "berry": "banana",
        "description": [
            "yellow",
            "sweet"
        ],
        "notes": []
      },
      {
        "berry": "aubergine",
        "taste": [
            "purple",
            "bitter"
        ],
        "notes": []
      }
]

У меня может быть разнесение по вертикали:

[
  {
    "berry": "banana",

    "description": [

      "yellow",
      "sweet"
    ],

    "notes": []
  },


  {
    "berry": "aubergine",

    "description": [

      "purple",
      "bitter"
    ],

    "notes": []
  }
]

Есть ли в PHP 7.x что-нибудь, что позволило бы мне настроить вывод довольно напечатанного JSON?


Историческая справка:

Классификация c ссылка на переформатирование JSON в PHP равна Формат JSON С PHP * 1 052 * Дейв Перретт .

Это дата 2008 года, предшествующая даже знаку PRETTY_PRINT (который появился 4 года спустя в 2012 году).

1 Ответ

0 голосов
/ 23 января 2020

Я не могу найти никаких специфических c дополнений к красивой печати JSON в PHP 7.x, но мне кажется, что я могу:

  • использовать PRETTY_PRINT flag
  • , затем , затем выполните серию str_replace() и preg_replace(), чтобы получить мой индивидуальный результат (как обрисовано в общих чертах в вопросе вверху)

Пример:

function Custom_Pretty_Print_JSON($Data) {

  if (!is_null(json_decode($Data, TRUE))) {

    $Data = json_decode($Data, TRUE);
  }

  $String = json_encode($Data, JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);

  $String = str_replace('    ', '  ', $String);

  $String = preg_replace("/(\:\s\{|\:\s\[|\,)\n([\s]+)(\"|\{|\[)/", "$1\n\n$2$3", $String);

  return $String;
}
...