【问题标题】:How can I customise Pretty_Printed JSON in PHP 7.x?如何在 PHP 7.x 中自定义 Pretty_Printed JSON?
【发布时间】:2020-05-09 11:53:45
【问题描述】:

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

  • JSON_UNESCAPED_SLASHES
  • JSON_UNESCAPED_UNICODE

但我正在寻找的自定义类型是转换显示的 JSON,使其最终看起来:

  • 少横向
    • 2 个空格缩进而不是 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 的输出?


历史记录:

在 PHP 中重新格式化 JSON 的经典参考是 Format JSON With PHP,作者是 Dave Perrett

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

【问题讨论】:

    标签: php json pretty-print


    【解决方案1】:

    我在 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]+)(\"|\{|\[)/", "$1\n\n$2$3", $String);
    
      return $String;
    }
    

    【讨论】:

      猜你喜欢
      • 2019-04-17
      • 1970-01-01
      • 1970-01-01
      • 2017-03-05
      • 2019-07-03
      • 2013-05-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多