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