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

来源:互联网 发布:v版4s支持什么网络 编辑:程序博客网 时间:2024/06/07 01:08

题目有点长长长。。。。。。
就四个问题:
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();    } }
原创粉丝点击