Heim >Backend-Entwicklung >PHP-Tutorial >php json转数组出错求助

php json转数组出错求助

WBOY
WBOYOriginal
2016-06-23 14:23:251462Durchsuche

1:先输出json

//组合医生信息JSON$jsonDoctorInfo  = "{\"mecdoctor\":[";$jsonDoctorInfo .= "{\"doctorId\":\"".$doctorId."\",\"doctorName\":\"".$strDoctorName."\", \"doctorprice\":\"".$strPrice."\",\"expertise\":\"".$strExpertise."\",\"departments\":\"".$strdepartments."\",\"doctorTitle\":\"".$strTitle."\",\"doctorPhoto\":\"".$strDoctorPhoto."\"}";$jsonDoctorInfo .= "]}";

2:获取并decode
$jsonGetDoctorInfoData = json_encode($jsonGetDoctorInfoData);
$objGetDoctorInfoData  = json_decode($jsonGetDoctorInfoData);
输出:
{"mecdoctor":[{"doctorId":"","doctorName":"XXXX", "doctorprice":"122","expertise":"XXXXX","departments":"医内科","doctorTitle":"主任医师","doctorPhoto":"hmh"}]}

3:将json转换成数组
//解析JSON数据	function _json_decode($json){		$comment = false;		$out = '$x=';		for ($i=0; $i<strlen($json);$i++){			if (!$comment){				if ( ($json[$i] == '{') || ($json[$i] == '[') )					$out .= ' array(';				else if (($json[$i] == '}') || ($json[$i] == ']'))					$out .= ')';				else if ($json[$i] == ':')					$out .= '=>';				else					$out .= $json[$i];          			}else				$out .= $json[$i];			if($json[$i]== '"' && $json[($i-1)]!="\\")				$comment = !$comment;		}		eval($out.";");				return $x;	}

4:出现问题
Parse error: syntax error, unexpected T_DOUBLE_ARROW in /home/u945504094/public_html/config/config.inc.php(876) : eval()'d code on line 1



回复讨论(解决方案)

请帮我看看到底是错到哪了。

$s = '{"mecdoctor":[{"doctorId":"","doctorName":"XXXX", "doctorprice":"122","expertise":"XXXXX","departments":"医内科","doctorTitle":"主任医师","doctorPhoto":"hmh"}]}';print_r(json_decode($s, true));
Array(    [mecdoctor] => Array        (            [0] => Array                (                    [doctorId] =>                     [doctorName] => XXXX                    [doctorprice] => 122                    [expertise] => XXXXX                    [departments] => 医内科                    [doctorTitle] => 主任医师                    [doctorPhoto] => hmh                )        ))
你并没有给出出错行附近的代码,自然也就不知道你遇到了什么问题了

谢谢版主,
我在第二步获取JSON后,将$s带入function _json_decode($json){中出现错误
4:出现问题
Parse error: syntax error, unexpected T_DOUBLE_ARROW in /home/u945504094/public_html/config/config.inc.php(876) : eval()'d code on line 1



$s = '{"mecdoctor":[{"doctorId":"","doctorName":"XXXX", "doctorprice":"122","expertise":"XXXXX","departments":"医内科","doctorTitle":"主任医师","doctorPhoto":"hmh"}]}';print_r(json_decode($s, true));
Array(    [mecdoctor] => Array        (            [0] => Array                (                    [doctorId] =>                     [doctorName] => XXXX                    [doctorprice] => 122                    [expertise] => XXXXX                    [departments] => 医内科                    [doctorTitle] => 主任医师                    [doctorPhoto] => hmh                )        ))
你并没有给出出错行附近的代码,自然也就不知道你遇到了什么问题了

另外请问一下,为什么我通过file_get_content获取的JSON字串,decode的时候加了true参数就没法解析成数组,但是直接将获取的json付给一个变量后测试就能转成数组呢

$urlGetDoctorInfo = "http://127.0.0.1:8080/mobileInterface/mobileDataInterface.php?Action=showDoctorInfo&doctorid=".$_REQUEST['doctorid'];$jsonGetDoctorInfoData =  file_get_contents($urlGetDoctorInfo);print_r(json_decode($jsonGetDoctorInfoData ,true));//数据就是空的//将字串穿付给变量后$s= '{"mecdoctor":[{"doctorId":"","doctorName":"XXX", "doctorprice":"122","expertise":"XXX","departments":"内科","doctorTitle":"主任医师","doctorPhoto":"hmh"}]}';print_r(json_decode($s,true));//正常输出

请问这是为什么?

没有问题呀

$s = '{"mecdoctor":[{"doctorId":"","doctorName":"XXXX", "doctorprice":"122","expertise":"XXXXX","departments":"医内科","doctorTitle":"主任医师","doctorPhoto":"hmh"}]}';print_r(_json_decode($s));    function _json_decode($json){        $comment = false;        $out = '$x=';        for ($i=0; $i  
Array(    [mecdoctor] => Array        (            [0] => Array                (                    [doctorId] =>                     [doctorName] => XXXX                    [doctorprice] => 122                    [expertise] => XXXXX                    [departments] => 医内科                    [doctorTitle] => 主任医师                    [doctorPhoto] => hmh                )        ))

是啊版主,但是用file获取的就不行。
另外请问一下,为什么我通过file_get_content获取的JSON字串,decode的时候加了true参数就没法解析成数组,但是直接将获取的json付给一个变量后测试就能转成数组呢

$urlGetDoctorInfo = "http://127.0.0.1:8080/mobileInterface/mobileDataInterface.php?Action=showDoctorInfo&doctorid=".$_REQUEST['doctorid'];$jsonGetDoctorInfoData =  file_get_contents($urlGetDoctorInfo);print_r(json_decode($jsonGetDoctorInfoData ,true));//数据就是空的//将字串穿付给变量后$s= '{"mecdoctor":[{"doctorId":"","doctorName":"XXX", "doctorprice":"122","expertise":"XXX","departments":"内科","doctorTitle":"主任医师","doctorPhoto":"hmh"}]}';print_r(json_decode($s,true));//正常输出

请问这是为什么?

$urlGetDoctorInfo = "http://127.0.0.1:8080/mobileInterface/mobileDataInterface.php?Action=showDoctorInfo&doctorid=".$_REQUEST['doctorid'];$jsonGetDoctorInfoData =  file_get_contents($urlGetDoctorInfo);print_r(json_decode($jsonGetDoctorInfoData ,true));//数据就是空的//将字串穿付给变量后$s= '{"mecdoctor":[{"doctorId":"","doctorName":"XXX", "doctorprice":"122","expertise":"XXX","departments":"内科","doctorTitle":"主任医师","doctorPhoto":"hmh"}]}';print_r(json_decode($s,true));//正常输出版主大人,麻烦你看看这是什么问题呢,刚那个问题好了。

没有问题呀
$s = '{"mecdoctor":[{"doctorId":"","doctorName":"XXXX", "doctorprice":"122","expertise":"XXXXX","departments":"医内科","doctorTitle":"主任医师","doctorPhoto":"hmh"}]}';print_r(_json_decode($s));    function _json_decode($json){        $comment = false;        $out = '$x=';        for ($i=0; $i  
Array(    [mecdoctor] => Array        (            [0] => Array                (                    [doctorId] =>                     [doctorName] => XXXX                    [doctorprice] => 122                    [expertise] => XXXXX                    [departments] => 医内科                    [doctorTitle] => 主任医师                    [doctorPhoto] => hmh                )        ))

那是编码问题!
json_decode 只能识别 utf-8 编码的数据

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn