【原创】将数据生成json文件下载以及json中文乱码和优化json文件格式的方法

本文详细介绍了如何生成JSON文件,如何下载JSON文件,针对下载过程中可能出现的中文乱码问题提出了解决方案,并分享了优化JSON文件格式的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目有点长长长。。。。。。
就四个问题:
1.如何生成json文件。
2.如何下载json文件。
3.下载的json中文不显示只显示编码。
4.生成的json文件里面数据格式优化。
解决问题:

<?php
$list = $_GET["barcode"];
$filename = $list.".json"; //文件路径 可以绝对路径也可以相对路径
//先判断当前文件是否存在 存在就不需要生成了 这个根据自己需要判断
if(file_exists($filename)){
    //文件的类型
    header('Content-type: application/json');
    //下载显示的名字 
    header("Content-Disposition: attachment; filename=$list".".json"); 
    readfile("$filename");
    exit();
}else{
    if(isset($list)){ 
        //获取数据
        $dog1=mysqli_query($link,"SELECT * FROM vieple where barcode = '{$list}' ");
        $cat1=mysqli_fetch_assoc($dog1);
        if($cat1['health']=="患者"){
            $dogsa=mysqli_query($link,"SELECT * FROM batch where barcode = '{$list}' ");
            $cat['satch']=mysqli_fetch_assoc($dogsa); 
            $dogbl=mysqli_query($link,"SELECT * FROM tdjb where  id = '{$list}' "); 
            $cat['tdjb']=mysqli_fetch_assoc($dogbl); 
            $dogex=mysqli_query($link,"SELECT * FROM tbxx where  id = '{$list}' "); 
            $cat['tblqsxx']=mysqli_fetch_assoc($dogex); 
            $doggr=mysqli_query($link,"SELECT * FROM trxx where  id = '{$list}' "); 
            $cat['txx']=mysqli_fetch_assoc($doggr); 
            $dogrx=mysqli_query($link,"SELECT * FROM tqsxx where  id = '{$list}' "); 
            $cat['tx']=mysqli_fetch_assoc($dogrx); 
            $dogsh=mysqli_query($link,"SELECT * FROM tb_shys where  id = '{$list}' "); 
            $cat['tys']=mysqli_fetch_assoc($dogsh); 
            $dogyj=mysqli_query($link,"SELECT * FROM tsjjbs where  id = '{$list}' "); 
            $cat['tb_yjjbs']=mysqli_fetch_assoc($dogyj); 
            $dogre=mysqli_query($link,"SELECT * FROM reult where baode = '{$list}' "); 
            $cat['repot']=mysqli_fetch_assoc($dogre); 
            $dogpo=mysqli_query($link,"SELECT * FROM reation where baode = '{$list}' "); 
            $cat['repoation']=mysqli_fetch_assoc($dogpo); 
        }else{
            $dogsa=mysqli_query($link,"SELECT * FROM saebatch where baode = '{$list}' ");
            $cat['samtch']=mysqli_fetch_assoc($dogsa);
            $dogall=mysqli_query($link,"SELECT * FROM viewth where baode = '{$list}' ");
            $cat['viewalth']=mysqli_fetch_assoc($dogall);
            $dogre=mysqli_query($link,"SELECT * FROM repesult where baode = '{$list}' "); 
            $cat['relt']=mysqli_fetch_assoc($dogre);
            $dogpo=mysqli_query($link,"SELECT * FROM repotion where baode = '{$list}' "); 
            while($as=mysqli_fetch_assoc($dogpo)){
                $cat['reption'][]=$as;
            }
            //备注 这个部分是给json里面数据字段加备注解释的 我为了方便直接赋值给$cat['beizhu'] 我做处理了 只放了一小部分
            $cat['beizhu']=array(
                "sach"=>array(
                    "samh" => "",
                    "id"=>"",
                    "baID"=>"",
                    "samte"=>"",
                    "DNo"=>"",
                    "saD"=>"",
                    "baeSEQ"=>"",
                    "bae"=>"",
                    "tempNamw"=>"",
                    "ly"=>"",
                    "getDate"=>"",
                    "sape"=>"",
                    "memo1"=>"",
                    "memo2"=>"备注2",
                    "prt"=>"",
                    "health"=>"",
                    "isSent"=>"",
                    "impte"=>"",
                    "memo3"=> "备注3",
                    "memo4"=>"",
                    "memo5"=> "5",
                    "manar"=>"",
                    "sextract"=>"",
                    "do_act"=>"",
                    "exnum"=>"",
                    "sample_num"=>"",
                    "pcr_num"=> "",
                    "memo"=> ""
                    )
            );

        }
       /** Json数据格式化 
        * @param  Mixed  $data   数据 
        * @param  String $indent 缩进字符,默认4个空格 
        * 循环输出json文件的时候需要把这部分放到最外层
        */  
        function jsonFormat($data, $indent=null){  

            // 对数组中每个元素递归进行urlencode操作,保护中文字符  
            array_walk_recursive($data, 'jsonFormatProtect');  

            // json encode  
            $data = json_encode($data);  

            // 将urlencode的内容进行urldecode  
            $data = urldecode($data);  

            // 缩进处理  
            $ret = '';  
            $pos = 0;  
            $length = strlen($data);  
            $indent = isset($indent)? $indent : '    ';  
            $newline = "\n";  
            $prevchar = '';  
            $outofquotes = true;  

            for($i=0; $i<=$length; $i++){  

                $char = substr($data, $i, 1);  

                if($char=='"' && $prevchar!='\\'){  
                    $outofquotes = !$outofquotes;  
                }elseif(($char=='}' || $char==']') && $outofquotes){  
                    $ret .= $newline;  
                    $pos --;  
                    for($j=0; $j<$pos; $j++){  
                        $ret .= $indent;  
                    }  
                }  

                $ret .= $char;  

                if(($char==',' || $char=='{' || $char=='[') && $outofquotes){  
                    $ret .= $newline;  
                    if($char=='{' || $char=='['){  
                        $pos ++;  
                    }  

                    for($j=0; $j<$pos; $j++){  
                        $ret .= $indent;  
                    }  
                }  

                $prevchar = $char;  
            }  

            return $ret;  
        }  

        /** 将数组元素进行urlencode 
        * @param String $val 
        */  
        function jsonFormatProtect(&$val){  
            if($val!==true && $val!==false && $val!==null){  
                $val = urlencode($val);  
            }  
        }  

        header('content-type:application/json;charset=utf8');  
    //讲json数据格式化
        $json_string = jsonFormat($cat);
        //指定目录生成文件 
        file_put_contents($list.".json", $json_string); 
        $filename = $list.".json";
        header('Content-type: application/json'); //文件的类型
        header("Content-Disposition: attachment; filename=$list".".json"); //下载显示的名字
        readfile("$filename");
        exit();
    } 
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值