json文件转成php数据文件,主要转换步骤如下:
1、json_decode
$content = json_decode(file_get_contents($originJsonDir . $fileName),true,10,JSON_OBJECT_AS_ARRAY);
3、var_export
var_export($item,true);
转换后会出现问题:
问题1:json数组转php,会自动带下标
解决办法:自己手动去除下标,拼装字符
问题2:json数组中同时有string、int
解决办法:挨个元素判断类型,string需要添加双引号
function outputIndexArrString($indexArr){
$values = array_values($indexArr);
//遍历处理
$resultValues=[];
foreach ($values as $elem){
if(is_string($elem)) {//string加上双引号
$resultValues[] = '"' . $elem . '"';
} else {
$resultValues[] = $elem;
}
}
return 'array( ' . implode(',',$resultValues) . ' )';
}
问题3:json中map的key由字符变为数字
解决办法:先用特殊字符替换,最后再替换回来
//数组处理
if(is_array($subItem)){
if(isIndexArr($subItem)){//索引数组提前处理成字符串
$item[$subKey] = outputIndexArrString($subItem);
}
else{//关联数组处理,所有的key加特殊字符,保障key不会转换为int
$subItemKeys=[];
foreach ($subItem as $sonKey => $sonItem) {
if(is_numeric($sonKey)){
$subItemKeys[] = '!#!'.$sonKey;//使用特殊字符标记
} else{
$subItemKeys[] = $sonKey;
}
}
if(count($subItemKeys)) $item[$subKey] = array_combine($subItemKeys,array_values($subItem));
}
}
}
//去掉关联数组 key中特殊字符
$row = str_replace('!#!','',$row);
问题4:value中含有\n被替换掉(解决思路参考问题3)
问题5:string的value中含有单引号、双引号被替换掉(解决思路参考问题3)
问题6:16进制被替换成10进制
解决办法:使用dechx函数转换回来
$key = '0x' . str_pad(dechex( $key),8,'0',STR_PAD_LEFT);
问题7:float小数点精度变了
解决办法:修改php.ini中serialize_precision的值小于17
serialize_precision = 14
网友评论