美文网首页
json转php可能碰到的坑

json转php可能碰到的坑

作者: 胖子罗 | 来源:发表于2021-01-08 17:28 被阅读0次

    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
    

    相关文章

      网友评论

          本文标题:json转php可能碰到的坑

          本文链接:https://www.haomeiwen.com/subject/hcyfaktx.html