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

原创 2017年06月06日 14:06:04

题目有点长长长。。。。。。
就四个问题:
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();
    } 
}
版权声明:本文为博主原创文章,未经博主允许不得转载。

完美解决Android使用Zxing扫描二维码改成竖屏后,后面的预览画面出现了拉伸,扭曲的情况

完美解决解决Android使用Zxing扫描二维码改成竖屏后,后面的预览画面出现了拉伸,扭曲的情况 第一步:找到com.zxing.camera包下的CameraConfigurationManage...

Android 简单生成二维码名片

二维码名片是现在很常见的,这里只是一个简单生成二维码,如果对二维码名片的内容没有过多的要求,可以借鉴一下。生成二维码用的是谷歌的Zxing库,关于扫码,这里就不多说了。 zxing下载地址:http...
  • QQ55214
  • QQ55214
  • 2016年10月27日 16:21
  • 585

spring boot 使用fastjson 处理json数据中文乱码 默认使用 ISO-8859-1编码格式

1、加入fastjson maven 依赖包 com.alibaba fastjson 1.2.30 ...

springMVC_json格式数据的接收和发送(未解决中文乱码问题)

本文是基于springMVC+jsp+jquery+json,做本次实践之前需要准备一下文件: 1.josn需要依赖的两个jar包: 网址:http://mvnrepository.com/art...
  • Asarja
  • Asarja
  • 2013年02月05日 16:41
  • 2158

java实现HTTP的post请求 json格式中文乱码问题

java,SpringMVC,jfinal,接口

PHP json_encode中文乱码解决方法

在 php 中使用 json_encode() 内置函数(php > 5.2)可以使用得 php 中数据可以与其它语言很好的传递并且使用它。 这个函数的功能是将数值转换成json数据存储格式。 ...

json_encede中文乱码解决方法

相信很多人在使用Ajax与后台php页面进行交互的时候都碰到过中文乱码的问题。JSON作为一种轻量级的数据交换格式,备受亲睐,但是用PHP作为后台交互,容易出现中文乱码的问题。JSON和js一样,对于...
  • czh0423
  • czh0423
  • 2013年09月12日 09:53
  • 1106

PHP JSON中文乱码解决方法大全

我们知道在使用Ajax技术与PHP后台交互时,中文乱码是常有的事,JSON作为与XML类似的数据交换格式,在PHP用来进行交互时也会出现中 文乱码的情况,解决PHP JSON中文乱码的方法思路其实与P...

volley获取json数据及中文乱码问题的解决

volley访问网络不用自己再开启线程,感觉要方便很多。 使用Volley以Http get的方式请求JSONObject对象,要使用JsonObjectRequest类的构造方法。 new Json...

解决Android Volley解析json,String数据中文乱码的问题

转自http://www.bubuko.com/infodetail-712004.html ,非常感谢这篇文章,帮我解决了此问题,so记录一下。 我遇到的问题基本上和文章中写的一样,只不过...
  • aengui
  • aengui
  • 2015年11月12日 20:55
  • 1200
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:【原创】将数据生成json文件下载以及json中文乱码和优化json文件格式的方法
举报原因:
原因补充:

(最多只允许输入30个字)