php数组对象转化成json格式

任务目标:将下列数组对象,转化成json格式

tdClass Object

(
    [id] => 9e929826-5c81-11e5-a788-00163e000c27
    [lawyerName] => 郭俊亭
    [lawFirm] => 新疆德新律师事务所
    [region] => 喀什地区
    [licenseAreas] => Array
        (
            [0] => stdClass Object
                (
                    [name] => 合同纠纷
                    [code] => 9
                    [score] => 50
                    [year] => 3
                    [count] => 12
                    [starLevel] => Array
                        (
                            [0] => 2
                            [1] => 2
                            [2] => 2
                            [3] => 2
                            [4] => 2
                        )

                )

            [1] => stdClass Object
                (
                    [name] => 财产损害
                    [code] => 7
                    [score] => 50
                    [year] => 3
                    [count] => 11
                    [starLevel] => Array
                        (
                            [0] => 2
                            [1] => 2
                            [2] => 2
                            [3] => 2
                            [4] => 2
                        )

                )

            [2] => stdClass Object
                (
                    [name] => 人身损害
                    [code] => 4
                    [score] => 45
                    [year] => 4
                    [count] => 4
                    [starLevel] => Array
                        (
                            [0] => 2
                            [1] => 2
                            [2] => 2
                            [3] => 2
                            [4] => 1
                        )

                )

        )

    [activeType] => 1
    [courts] => Array
        (
            [0] => stdClass Object
                (
                    [name] => 新疆克孜勒苏柯尔克孜自治州阿图什市人民法院
                    [code] => 3470
                    [count] => 1
                )

            [1] => stdClass Object
                (
                    [name] => 新疆喀什地区中级人民法院
                    [code] => 3474
                    [count] => 14
                )

            [2] => stdClass Object
                (
                    [name] => 新疆维吾尔自治区高级人民法院
                    [code] => 3413
                    [count] => 5
                )

        )

    [totalJudgementCount] => 38
    [licenseNumber] => 16531200410618832
    [licenseYear] => -1

)

思路:读文件,存成字符串。再将字符串转化成数组。对数组进行遍历处理。

代码:

<?php
/**
 * Created by PhpStorm.
 * User: zq
 * Date: 2018/5/11
 * Time: 9:54
 */
header("content-type:text/html;charset=utf-8");//处理乱码
$str = file_get_contents('obj.txt');//将整个文件内容读入到一个字符串中
$arr = explode("\r\n", $str);//转换成数组
$string_key=" => ";
$stack = array();
//用栈实现括号匹配,如果row为)并且栈顶为1输出},else]
foreach ($arr as &$row) {
    $row = trim($row);//去除两端多余字符
//{
     if(strpos($row,"Object") !==false){
        array_push($stack, "1");
        $row =str_replace($string_key,"",$row);
        echo "{<br>";
    }
//[
     if(strpos($row,"Array") !==false) {
        array_push($stack, "0");
        $row =str_replace(" => Array","",$row);
        $row =str_replace("[","\"",$row);
        $row =str_replace("]","\":",$row);
        echo $row;
        echo "[<br>";
    }
//利用正则表达式,匹配数组元素
     if(preg_match("/\[[0-9]\]\s=>\s/",$row)){
        $row=preg_replace("/\[[0-9]\]\s=>\s/","",$row);
        echo $row.",<br>";
    }
//一般元素处理
     if(strpos($row,$string_key) !==false){
        $row =str_replace($string_key,   ":\"" ,$row);
        $row =str_replace("[","\"",$row);
        $row =str_replace("]","\"",$row);
        echo $row."\",<br>";
    }
//出栈,右括号匹配
     if(strpos($row,")") !==false){
        $pop=array_pop($stack);
        if($pop==1){
            echo "}";
            if(!empty($stack))
                echo ",";
        }
        if($pop==0){
            echo "]";
            if(!empty($stack))
                echo ",";
        }
    }
}
unset($row);//释放row
?>

知识点:

1.json格式的理解.

2.乱码处理

3.栈实现括号匹配

4.strpos()函数:用来判断字符串是否包含另一个字符串

5.str_replace()函数:替换字符串

6.正则表达式,以及正则表达式匹配与替换.

if(preg_match("/\[[0-9]\]\s=>\s/",$row)){
        $row=preg_replace("/\[[0-9]\]\s=>\s/","",$row);
    }

匹配了[5] => 等

\s为空格


总结:

起初对json格式理解不够,浪费许多时间.通过应输出json格式与原文件对比,进行分析,会更加快速准确.

https://www.bejson.com/jsonviewernew/

json在线视图查看器



猜你喜欢

转载自blog.csdn.net/sinat_40297086/article/details/80291887