问题引入
今天在编写短信API接口时,遇到了返回码为 JSON 格式的问题。写小程序API接口时也常常会遇到 JSON字符串 与 对象 或 数组 互换的问题。PHP自带有函数 “ json_decode() ” 和 “ json_encode() ” ,在这里可以先借用一下(前者可将 JSON 转换为 对象 ,后者可将 对象 、 数组 转换为 JSON )。
解决方案
下面是将 JSON 转换为 对象 的代码:
<?php
$json = '{"name":"Twikor","age":"16"}';
$decode = json_decode($json);
echo "Welcome,".$decode->name.".You are ".$decode->age."years old.";
?>
输出:
Welcome,Twikor.You are 16 years old.
上面的列子很容易的将 JSON 转换成了对象,但是对象不能运用于“ foreach() ”中,那如何将对象转换成数组呢?
下面是将 JSON 转换成 对象 再转换为 数组 的代码:
<?php
$json = '{"name":"Twikor","age":"16"}';
$decode = json_decode($json);//已经变成对象了
foreach($decode as $key => $value)
{
$new_array[$key] = $value;
}
print_r($new_array);//这里打印出来的的就是数组了
?>
输出:
array(
"name" => "Twikor",
"age" => "16"
)
然而,在实际应用当中,我们又常常会遇到判断字符串是否为 JSON 的问题。这时,我们要巧妙运用 “ json_decode() ” 函数解析 JSON 出现错误解析时返回 NULL 的现象,运用 is_null() 函数来判断。
下面是判断字符串是否为 JSON 格式的函数(是,返回 true ;不是,返回 false 。):
<?php
function judge_json($str)
{
if(is_null(json_decode($str)))
{
return flase;
}
else
{
return true;
}
}
$json = '{"name":"Twikor","age":"16"}';
if(judge_json($json))//已经是TRUE了
{
echo "json variable is formed as a json.";
}
else
{
echo "json variable is not formed as a json.";
}
?>
输出:
json variable is formed as a json.