<?php
/***************将数据库中的记录json化*****************/
mysql_connect("localhost","root","");
mysql_select_db("discuz3");
mysql_query("set names gbk");
//$json_arr=array();
$sql="select * from pre_home_feed limit 0,20";
$result=mysql_query($sql);
if($num=mysql_num_rows($result)){
while($row=mysql_fetch_assoc($result)){
$row['title_data']=empty($row['title_data'])?array():(is_array($row['title_data'])?$row['title_data']:unserialize($row['title_data']));//feed标题
$row['body_data']=empty($row['body_data'])?array():(is_array($row['body_data'])?$row['body_data']:unserialize($row['body_data']));//feed内容
$searchs = $replaces = array();
if($row['title_data']) {//feed标题,即:动态标题不为空的情况 反序列化的title_data数据
foreach (array_keys($row['title_data']) as $key) {//$key值:message、hash_data
$searchs[] = '{'.$key.'}';
$replaces[] = $row['title_data'][$key];
}
$searchs[] = '{actor}';
$row['title_template'] = str_replace($searchs, $replaces, $row['title_template']);//替换后的feed标题模板
}
$searchs = $replaces = array();
if($row['body_data']) {//feed标题,即:动态标题不为空的情况 反序列化的title_data数据
foreach (array_keys($row['body_data']) as $key) {//$key值:message、hash_data
$searchs[] = '{'.$key.'}';
$replaces[] = $row['body_data'][$key];
}
$searchs[] = '{actor}';
$row['body_template'] = str_replace($searchs, $replaces, $row['body_template']);//替换后的feed内容模板
}
$json_arr[$row['feedid']][]=$row;//即将被json化的数组:一定要是键值对,务必确保数组中所有的元素及子元素都是关联数组才能保证转化成的json数据格式正确
}
}
echo JSON($json_arr);
/*************************************************************/
/****返回的json格式数据:这是正确的json格式数据****************
*{
* "name":"黄强",
* "nick":"小强",
* "contact":{
* "email":"huangqiang@163.com",
* "website":"http://www.baidu.com"
* }
* }
*************************************************************/
$arr = array(
'name' => '黄强',
'nick' => '小强',
'contact' => array(
'email' => 'huangqiang@163.com',
'website' => 'http://www.baidu.com',
)
);
//echo JSON($arr);
/**************************************************************
*
* 使用特定function对数组中所有元素做处理
* @param string &$array 要处理的字符串
* @param string $function 要执行的函数
* @return boolean $apply_to_keys_also 是否也应用到key上
* @access public
*
*************************************************************/
function arrayRecursive(&$array, $function, $apply_to_keys_also = false)
{
static $recursive_counter = 0;
if (++$recursive_counter > 1000) {
die('possible deep recursion attack');
}
foreach ($array as $key => $value) {
if (is_array($value)) {
arrayRecursive($array[$key], $function, $apply_to_keys_also);
} else {
$array[$key] = $function($value);
}
if ($apply_to_keys_also && is_string($key)) {
$new_key = $function($key);
if ($new_key != $key) {
$array[$new_key] = $array[$key];
unset($array[$key]);
}
}
}
$recursive_counter--;
}
/**************************************************************
*
* 将数组转换为JSON字符串(兼容中文)
* @param array $array 要转换的数组
* @return string 转换得到的json字符串
* @access public
*
*************************************************************/
function JSON($array) {
arrayRecursive($array, 'urlencode', true);
$json = json_encode($array);//将数组json化
return urldecode($json);//返回json格式的字符串
}
?>
提示:java开发人员接受到的json数据编码为gbk编码,可能是我的php文件编码是gbk的缘故吧