如何在 PHP 7.x 中自定义 Pretty_Printed JSON?

How can I customise Pretty_Printed JSON in PHP 7.x?

PHP 的内置 PRETTY_PRINT 除了一些额外的标志之外不允许进行太多自定义:

但我正在寻找的自定义类型是一种可以转换显示 JSON 的自定义,因此它最终看起来是:

所以不是水平 spaced 输出:

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

我可以垂直 spaced 出来:

[
  {
    "berry": "banana",

    "description": [

      "yellow",
      "sweet"
    ],

    "notes": []
  },


  {
    "berry": "aubergine",

    "description": [

      "purple",
      "bitter"
    ],

    "notes": []
  }
]

PHP 7.x 中是否有任何内容可以让我自定义漂亮印刷的输出 JSON?


历史记录:

在 PHP 中重新格式化 JSON 的经典参考文献是 Dave PerrettFormat JSON With PHP

这可以追溯到 2008 年,甚至早于 PRETTY_PRINT 旗帜(4 年后的 2012 年)。

我在 PHP 7.x 中找不到漂亮印刷 JSON 的任何具体补充,但我觉得我可以:

  • 使用PRETTY_PRINT标志
  • 然后 跟进一系列 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]+)(\"|\{|\[)/", "\n\n", $String);

  return $String;
}