PHP json_encode JSON_PRETTY_PRINT:如何打印不同的格式?

问题描述 投票:0回答:3

我知道 PHP 已经提供了 JSON_PRETTY_PRINT 来格式化 json 数据。如果我想要不同的格式怎么办?

$message = array(
    "Open all day" => "Sundays,Saturdays,12-12-2013, 14-10-2013",

    "Availabilty" => array(
        "12/12/2013" => array(
            30,
            60,
            30,
            0
        ),
        "13/12/2013" => array(
            30,
            0,
            30,
            60,
        ),
    ),

);

$json = json_encode($message,JSON_PRETTY_PRINT);

结果,

{
    "Open all day": "Sundays,Saturdays,12-12-2013, 14-10-2013",
    "Availabilty": {
        "12\/12\/2013": [
            30,
            60,
            30,
            0
        ],
        "13\/12\/2013": [
            30,
            0,
            30,
            60
        ]
    }
}

但我更喜欢,

{"Open all day":"
Sundays, 
Saturdays,
Fridays,
12/12/2013, 
14/10/2013, 
04/12/2013
",

"Availability":"
"12/12/2013":[30,60,30,0],
"13/12/2013":[30,60,30,0]
"}

这可能吗?也许是正则表达式?另外,我不想要那些反斜杠 - 可以将它们删除吗?

php regex json php-5.4
3个回答
15
投票

单独使用

json_encode
无法获得该格式。

但是为了防止斜杠被转义,您可以使用

JSON_UNESCAPED_SLASHES
常量:

$json = json_encode($message,JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES);

请参阅文档此处

演示!


4
投票

php有一些常量来保证json有效,所以建议一直使用这些常量来保证信息的完整性

http://www.php.net/manual/en/json.constants.php

如果你想在不使用转义反斜杠的情况下使用,只要 json 的格式很好,但不能保证在某些时候,或者某些系统拒绝你的 json ...所以总是使用 php 提供的常量确保信息的完整性。


0
投票

您可以使用您的脚本代替 JSON_PRETTY_PRINT 像这样的东西

<?php
$c=array("a"=>"aaa","b"=>"bbb","c"=>array("aa","bb"));

function pretty($arr){
  $new="";
  $last = array_key_last($arr);

  foreach($arr as $key => $val){
    if($key!=$last){$virg="";}else{$virg=",";}

    if(is_array($val)){
      $val=json_encode($val);
      $a="\"".$key."\":".$val.",";
    }else{
      $a="\"".$key."\":\"".$val."\",\r\n";
    }
    $new=$new.$a;
  }

 return "{
 ".$new."
 }";
}

$c=pretty($c);
echo "<pre>".$c."</pre>";
© www.soinside.com 2019 - 2024. All rights reserved.