Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 需要帮助使用JSON Pretty Print对该逻辑进行排序吗_Php_Json_Pretty Print - Fatal编程技术网

Php 需要帮助使用JSON Pretty Print对该逻辑进行排序吗

Php 需要帮助使用JSON Pretty Print对该逻辑进行排序吗,php,json,pretty-print,Php,Json,Pretty Print,在打印每个对象数组之间的对象数组时,尝试漂亮地打印json,效果很好,cept,似乎增加了一行额外的内容。可能需要一些逻辑上的帮助,因为我已经有一段时间没碰它了 用于打印的代码如下所示: public function pretty_print($json_data, $line_numbers = true) { $return = ''; $space = 0; $flag = false; $json_data = trim($json_data);

在打印每个对象数组之间的对象数组时,尝试漂亮地打印json,效果很好,cept,似乎增加了一行额外的内容。可能需要一些逻辑上的帮助,因为我已经有一段时间没碰它了

用于打印的代码如下所示:

public function pretty_print($json_data, $line_numbers = true)
{
    $return = '';

    $space = 0;
    $flag = false;
    $json_data = trim($json_data);
    $line = 1;

    if (!empty($json_data)) {

        if (!empty($line_numbers))
            $return .= '<div class="line" data-line-number="' . $line . '">';

        //loop for iterating the full json data
        for($counter = 0; $counter < strlen($json_data); $counter++)
        {
            //Checking ending second and third brackets
            if ($json_data[$counter] == '}' || $json_data[$counter] == ']')
            {
                $space--;
                $line++;
                $return .= !empty($line_numbers) ? '</div><div class="line" data-line-number="' . $line . '">' : PHP_EOL;
                $return .= str_repeat(' ', ($space*4));
            }

            //Checking for double quote(“) and comma (,)
            if ($json_data[$counter] == '"' && ((!empty($counter) && $json_data[$counter-1] == ',') || ($counter > 1 && $json_data[$counter-2] == ',')))
            {
                $line++;
                $return .= !empty($line_numbers) ? '</div><div class="line" data-line-number="' . $line . '">' : PHP_EOL;
                $return .= str_repeat(' ', ($space*4));
            }
            if ($json_data[$counter] == '"' && !$flag)
            {
                if ( (!empty($counter) && $json_data[$counter-1] == ':') || ($counter > 1 && $json_data[$counter-2] == ':' ))
                    $return .= ' <span class="json-property">';
                else
                    $return .= '<span class="json-value">';
            }

            $return .= $json_data[$counter];

            //Checking conditions for adding closing span tag
            if ($json_data[$counter] == '"' && $flag) {
                $return .= '</span>';
            }
            if ($json_data[$counter] == '"')
                $flag = !$flag;

            //Checking starting second and third brackets

            if ($json_data[$counter] == '{' || $json_data[$counter] == '[')
            {
                $space++;
                $line++;
                $return .= !empty($line_numbers) ? '</div><div class="line" data-line-number="' . $line . '">' : PHP_EOL;
                $return .= str_repeat(' ', ($space*4));
            }
        }

        if (!empty($line_numbers))
            $return .= '</div>';
    }

    return !empty($return) ? trim($return) : json_encode(json_decode($json_data, true), JSON_PRETTY_PRINT);
}
public函数pretty\u print($json\u data,$line\u numbers=true)
{
$return='';
$space=0;
$flag=false;
$json_data=trim($json_data);
$line=1;
如果(!empty($json_数据)){
如果(!空($line_编号))
$return.='';
//循环以迭代完整的json数据
对于($counter=0;$counter1&&$json_数据[$counter-2]=','))
{
$line++;
$return.=!空($line\u number)?“”:PHP\u EOL;
$return.=str_repeat(“”,($space*4));
}
如果($json_数据[$counter]='''“&&&!$flag)
{
如果((!empty($counter)&&$json_数据[$counter-1]==':')| |($counter>1&&$json_数据[$counter-2]==':'))
$return.='';
其他的
$return.='';
}
$return.=$json_数据[$counter];
//检查添加闭合跨距标记的条件
如果($json_数据[$counter]=''''''&&&$flag){
$return.='';
}
如果($json_数据[$counter]=''”)
$flag=!$flag;
//检查起始第二和第三个支架
如果($json_数据[$counter]='{'||$json_数据[$counter]='[')
{
$space++;
$line++;
$return.=!空($line\u number)?“”:PHP\u EOL;
$return.=str_repeat(“”,($space*4));
}
}
如果(!空($line_编号))
$return.='';
}
return!empty($return)?trim($return):json_encode(json_decode($json_data,true),json_PRETTY_PRINT);
}
但是似乎用一个额外的

这是一张这样的图片,如果可能的话,我想消除数组中对象之间的额外空间。这里的任何帮助,都将非常感谢


你为什么要手动解析JSON?这段代码将非常难以推理和维护,尤其是当你稍后在几乎不可避免地出现错误的情况下再来分析时

与其采取困难的方法,不如考虑做以下几点:< BR> 1.重新格式化JSON,使其符合您的需要。例如,在这种情况下,您更喜欢将对象的结束括号和结束括号保持在同一行上,而不是保持在单独的行上。
2.将已格式化的JSON拆分为单独的行。
3.将JSON的各行用HTML包装。
4.重新加入行以获得最终HTML

函数prettyWrapJson($json\u data,$line\u numbers=true){
//确保我们的JSON格式正确。
$json_data=json_encode(json_decode($json_data,true),json_PRETTY_PRINT);
//修改格式,使相邻的右大括号和右大括号位于同一行上。
//注意:如果我们想对方括号做同样的操作,我们可以添加类似的行。
$json_data=preg_replace('/},\n+{/s','},{',$json_data);
$line_编号=1;
//强制一个布尔值。
$line\u number=!空($line\u number);
//拆分为一组单独的行。
$json_lines=explode(“\n”,$json_数据);
//将各行换行。
$json\u line=array\u map(函数($json\u line)使用($line\u number,&$line\u number){
//检查此行是否包含属性名称。
if(preg_match('/^(+“[^”]+”):/',$json_行,$matches)){
//类似于分解(“:”,$json_行)的结果,但更安全,因为冒号字符可能存在于行中的其他位置。
$parts=array($matches[1],substr($json_-line,strlen($matches[1])+1));
//将属性包装在范围内,但将空间保留在范围外。
$parts[0]=preg_replace(“/^(+)/”、“$1”、$parts[0]);
//如果字符串的另一部分是一个值,而不是一个大括号,那么我们只想将其换行。
if(strpos($parts[1],'{')==false&&strpos($parts[1],'[')==false){
//类似地,将值包装在范围中,但将空格保留在范围之外。
$parts[1]=预替换(“/^(+)/”、“$1”、$parts[1]);
}
//用前面去掉的冒号重新连接字符串部分。
$json_line=内爆(“:”,$parts);
}
//最后,如果需要,我们可以使用行号div来包装该行。
如果($line_编号){
$json_-line='.$json_-line'.';
}
返回$json_行;
},$json_行);
//重新连接行并返回结果。
返回内爆(“\n”,$json\u行);
}

您可能需要稍微修改一下,以使其格式完全符合您的偏好,但这对您来说应该更容易处理。

为什么您要手动解析JSON?这段代码将非常难以推理和维护,尤其是当您稍后在几乎不可避免地出现错误时再使用它时本身

与其采取困难的方法,不如考虑做以下几点:< BR> 1.重新格式化JSON,以便