描述:
Json是纯文本,在php代码中json格式的内容是字符串,类似xml
转换:
Json格式的字符串可以转换为php数组和对象,反转也是可以的,转换和反转是接受的数据格式只能是utf8的,所以如果数据数gbk格式,首页要转换为utf8的
Php中json字符串的结构形式2种:
1.数组结构:[] 例:[“one”,”two”,”three”] 数组结构是由索引数组转化而来
2.对象结构:{} 例:{“1”:”one”,”2”:”two”,”3”:”three”} 对象结构是由关联数组和对象类型的数据转化而来
3.还有是数组结构和对象结构混合使用:{[]}
注意:这里说的数组和对象只是显示的结构形式,不是数据类型
数组转换为json格式的字符串
1. 转换时考虑把数据编码格式转码为utf-8格式,因为json_encode()只接受utf-8格式的数据,所以要判断数据编码格式
要转换的数组$datas = Array
(
Array
(
'house_name' => '海伦春天1',
'thumb' => 'http://127.0.0.1/house/uploadfile/2016/0610/20160610033447681.jpg',
'address' => '西安西咸新区阿房一路海伦春天',
'estate' => '0',
'style' => '',
'price' => '5800',
)
);
$datas = arr2string($datas,'gbk');
print_r($datas);/**
* 数组转换为json格式的字符串
* $data 传递的数组
* $icon 传入数据的编码格式,默认为utf-8,由于咱们中国人开发的程序只要是utf-8和gbk居多,所以这里只要围绕这2个编码测试
*/
function arr2string($data,$icon='utf-8'){
if($icon=='gbk'){
$data = m_iconv('gbk','utf-8',$data);
}
if(version_compare(PHP_VERSION,'5.3.0','
$data = json_encode($data);
}else{
$data = json_encode($data,JSON_FORCE_OBJECT);
}
return $data;
}//多维数组编码格式转换
function m_iconv($in_charset,$out_charset,$datas){
if(is_array($datas)){ //如果数据为数组
foreach($datas as $k=>$v){
if(is_array($v)){ //如果数据为多维数组,进行下面的递归调用m_iconv()函数自身
$k = iconv($in_charset,$out_charset,$k);
$ml[$k] = m_iconv($in_charset,$out_charset,$v);
}elseif(is_string($k) || is_string($v)){ //如果是一维数组判断键和值是否为字符串
if(is_string($k)){
$k = iconv($in_charset,$out_charset,$k);
}
if(is_string($v)){
$v = iconv($in_charset,$out_charset,$v);
}
$ml[$k] = $v;
}else{
$ml[$k] = $v; //一维数组键和值都为数组
}
}
}elseif(is_string($datas)){ //如果数据为字符串
$ml = iconv($in_charset,$out_charset,$datas);
}else{
$ml = $datas; //如果数据为数值
}
return $ml;
}