目录
回复讨论(解决方案)
首页 后端开发 php教程 求助:格式化这样的一个json串,语法该怎么写?()

求助:格式化这样的一个json串,语法该怎么写?()

Jun 23, 2016 pm 02:00 PM

例如有一个二维数组 
$myarrnews=array();
$myarrnews =explode("||**||", $mystr); //内容来自$mystr,包括多条新闻记录
$myarrline=array();  
$myarrline =explode("||%%||", $myarrnews[$i]);      //$myarrline 是其中的一条记录,包括多个字段
print_r($myarrline);                     //每个新闻各个字段的集合,例如:Array ( [0] => 10 [1] => 2166 [2] => 创新。。。
现在需要这样的一个json串,格式为:(暂时设定为每页显示5条)
{
    "ret": 0, 
    "data": {
        "newslist": [
            {
                "title": "第1条新闻标题", 
                "commentcount": 0, 
                "source": "来源", 
                "nid": 10, 
                "digest": "新闻简介", 
                "ptime": "2012-03-28 14:11:43"
            }, 
            {
                "title": "第2条新闻标题", 
                "commentcount": 0, 
                "source": "来源", 
                "nid": 9, 
                "digest": "新闻简介", 
                "ptime": "2012-03-28 13:12:56"
            }, 
            {
                "title": "第3条新闻标题", 
                "commentcount": 0, 
                "source": "来源", 
                "nid": 8, 
                "digest": "新闻简介", 
                "ptime": "2012-03-28 12:21:11"
            }, 
            {
                "title": "第4条新闻标题", 
                "commentcount": 0, 
                "source": "来源", 
                "nid": 7, 
                "digest": "新闻简介", 
                "ptime": "2012-03-28 11:21:00"
            }, 
            {
                "title": "第5条新闻标题", 
                "commentcount": 1, 
                "source": "来源", 
                "nid": 5, 
                "digest": "新闻简介", 
                "ptime": "2012-02-18 19:20:01"
            }
        ], 
        "totalnum": 5
    }, 
    "msg": "ok"
}
//----------------------------
php语法该如何书写呢?请大家帮忙,急用!


回复讨论(解决方案)

俺是php菜鸟,绝对菜的那种,请大家回帖时代码和步骤给的详细些!谢谢了

$mystr 是什么内容,你总要贴出原始数据是什么样吧。

[code=php]再详细点:
$weblink="http://www.xxx.net.cn/news/getnews.asp?cid=4&topnum=10";
 $mystr=file_get_contents($weblink);
 $myarrnews=array();
//拆分分条新闻条件成数组
$myarrnews =explode("||**||", $mystr);
//    print_r ($myarrnews);              //该分类ID下前10条数据的集合
 //拆分具体内容条件成数组    
 /*
    下面对采集的数据集合进行描述,就是说每条数据都包括以下的字段信息,而且这些信息已经获取到$myarrnews中了!
0:代表采集信息数量
1:信息原始ID号 (新闻分类ID号)
2:信息标题
3:信息类别
4:信息内容
5:是否首页图片
6:访问量
7:发布人
8:副标题
9:信息发布时间
 */
$obj->ret=0;
 $newslist=array("newslist"=>array());
for ($i=0;$i            $myarrline=array();  
           $myarrline =explode("||%%||", $myarrnews[$i]);      
           print_r($myarrline);                     //每个新闻各个字段的集合,例如:Array ( [0] => 10 [1] => 2166 [2] => 创新工会工作 创建模范职工之家 [3] => 学院新闻 [4] =>。。。。
例如:
 if ($myarrline[$i]!="") {   
              $newslist[$i]=>'title'=$myarrline[2];
              $newslist[$i]=>commentcount=0;
              $newslist[$i]=>source=$myarrline[7];
              $newslist[$i]=>nid=$myarrline[1];
              $newslist[$i]=>replycount=0;
              $newslist[$i]=>ptime=$myarrline[9];                  
          }
以下的格式不会写了(上面写的也不对)请大家帮忙补充

请给出真实的 url!
不知道原始信息如何讨论?

抱歉,安全原因,不能给出原始地址!
信息已经给的很详细了!不知道大侠还想要什么信息?
生成的json串只要类似即可

那你至少也得给出一条数据(哪怕是虚构的)
并指出与 json 成员的对应关系

其实大家如果阅读了#3楼的代码,看到这行:
  $newslist[$i]=>'title'=$myarrline[2];
大致就能猜出需求的格式了,而且我只要大概的语法格式,不必一一对应各个字段的(其实,有些字段还需要在改造!)。既然大家想看详细点的信息,我就再解释下。
//---------------------------------------------------------------------------------------------------
$weblink="http://www.xxx.net.cn/news/getnews.asp?cid=4&topnum=5";
 $mystr=file_get_contents($weblink);
 $myarrnews=array();
//拆分分条新闻条件成数组
$myarrnews =explode("||**||", $mystr);
//    print_r ($myarrnews);              //该分类ID下前5条数据的集合
 //拆分具体内容条件成数组 
//以上代码可以得到从asp网页中分类cid=4的新闻(如学院新闻)共5条记录
//--------------------------------------------------------------------------------------------------
//接下来的代码中,变量$myarrline为其中的一条新闻记录,该条新闻记录又包括了10个字段,已经获取到值了。其中第2个字段是新闻id号(即nid),[1] => 2166 ,(参考0#楼代码)。其中第3个字段是新闻标题,例如:[2] => 创新工会工作 创建模范职工之家,等等,我就不一一解释了。这条新闻是获取到的5条新闻中的第一条。大家明白了吧!?
           $myarrline=array();  
           $myarrline =explode("||%%||", $myarrnews[$i]);      
           print_r($myarrline);                     //每个新闻各个字段的集合,例如:Array ( [0] => 5 [1] => 2166 [2] => 创新工会工作 创建模范职工之家 [3] => 学院新闻 [4] =>。。。。
//--------------------------------------------------------------------
//最终需要转换重组成0#楼的json串,newslist是个数组,包含了5条记录,每条记录都要求显示出title。。。等6个字段。(其实大家不必考虑每个字段对应哪个$myarrline[i]的值,看到3#楼代码 $newslist[$i]=>'title'=$myarrline[2];就全明白了!大家哪怕只写出一个title,我照猫画虎就搞定了!ok?)
累死我了!

 $newslist[$i] = array(  'title' => $myarrline[2],  'commentcount' => 0,  'source' => $myarrline[7],  'nid' => $myarrline[1],  'replycount' => 0,  'ptime' => $myarrline[9],);
登录后复制


帮人还帮出毛病来了

首先感谢xuzuning斑竹的回复,不过我真的很菜,只给我这点代码我是搞不定的,我需要的是0#楼json串的完整代码,其中newlist数组中的5条记录用循环实现。
再次感谢!

$ar = arrat(  ' ret' => 0,   'data' => array(     'newslist' => $newslist,  ),);echo json_encode($ar);
登录后复制

$newslist 的产生 #8 已经示例了,你自己依葫芦画瓢吧

其实我本意是想这样:
//----------------------------------------
$obj->ret=0;
$newlist=array();
$data=array("newslist"=>$newlist,"totalnum"=>5);
for ($i=0;$i echo "-----------------";
$myarrline=array();
$myarrline =explode("||%%||", $myarrnews[$i]);
print_r($myarrline); //每个新闻各个字段的集合,例如:Array ( [0] => 10 [1] => 2166 [2] => 创新工会工作 创建模范职工之家 [3] => 学院新闻 [4] =>
if ($myarrnews[$i]!="") {
//echo "No$i";
$newsobj=new News();
$newsobj->setTitle($myarrline[2]);
// echo "========>".$newsobj->getTitle();
$newsobj->setCommentcount(0);
$newsobj->setSource($myarrline[7]);
$newsobj->setNid($myarrline[1]);
$newsobj->setReplycount(0);
$newsobj->setPtime($myarrline[9]);

$newslist[$i]=>$newsobj; //这里赋值有问题
}
else
{
echo "在当前年度内没有采集到数据!可能是本站没有最新数据信息!";
return;
}
}
$obj->data=$data;
/* echo "总量:".$myarrline[0]."
";
echo "原始ID:".$myarrline[1]."
";
echo "标题:".$myarrline[2]."
";
echo "类别:".$myarrline[3]."
";
//$bodyneirong=preg_replace('<\s*img([^>]*?)>','',myarrline[4]);
echo "内容:".$myarrline[4]."
";
echo "图片:".$myarrline[5]."
";
echo "访问量:".$myarrline[6]."
";
echo "发布人:".$myarrline[7]."
";
echo "副标题:".$myarrline[8]."
";
echo "发布时间:".$myarrline[9]."
";
echo "


";
*/
$obj->msg ="ok";
print_r(json_encode($obj));
$newslist=NULL;
$obj=NULL;
?>
//-----------------------------------
$newslist[$i]=>$newsobj; //但是这里赋值有问题!!
另外,虽然我总共只学了2个小时的php,我也知道
$obj->ret=0;

$obj = array(
是有区别的!

$data = array("newslist"=>$newlist,"totalnum"=>5);
显然应该放到for循环的后面赋值而不是前面。

不行啊,还是那一行提示有问题,移动代码也不行:
$obj->ret=0;
$newslist=array();
$data=array("newslist"=>$newslist,"totalnum"=>5);
for ($i=0;$i echo "-----------------";
$myarrline=array();
$myarrline =explode("||%%||", $myarrnews[$i]);
print_r($myarrline); //每个新闻各个字段的集合,例如:Array ( [0] => 10 [1] => 2166 [2] => 创新工会工作 创建模范职工之家 [3] => 学院新闻 [4] =>
if ($myarrnews[$i]!="") {
echo "No$i";
$newsobj=new News();
$newsobj->setTitle($myarrline[2]);
echo "========>".$newsobj->getTitle(); //此处可以取到title值
$newsobj->setCommentcount(0);
$newsobj->setSource($myarrline[7]);
$newsobj->setNid($myarrline[1]);
$newsobj->setReplycount(0);
$newsobj->setPtime($myarrline[9]);

$newslist[$i]=>$newsobj; //这里赋值有问题 ,提示Parse error: parse error in
}
else
{
echo "在当前年度内没有采集到数据!可能是本站没有最新数据信息!";
return;
}
}

$obj->data=$data;
/* echo "总量:".$myarrline[0]."
";
echo "原始ID:".$myarrline[1]."
";
echo "标题:".$myarrline[2]."
";
echo "类别:".$myarrline[3]."
";
//$bodyneirong=preg_replace('<\s*img([^>]*?)>','',myarrline[4]);
echo "内容:".$myarrline[4]."
";
echo "图片:".$myarrline[5]."
";
echo "访问量:".$myarrline[6]."
";
echo "发布人:".$myarrline[7]."
";
echo "副标题:".$myarrline[8]."
";
echo "发布时间:".$myarrline[9]."
";
echo "


";
*/
$obj->msg ="ok";
print_r(json_encode($obj));

for ($i=0;$i echo "-----------------";
$myarrline=array();
$myarrline =explode("||%%||", $myarrnews[$i]);
print_r($myarrline); //每个新闻各个字段的集合,例如:Array ( [0] => 10 [1] => 2166 [2] => 创新工会工作 创建模范职工之家 [3] => 学院新闻 [4] =>
if ($myarrnews[$i]!="") {

$newslistarr=array('title' => $myarrline[2], 'commentcount' => 0, 'source' => $myarrline[7], 'nid' => $myarrline[1], 'replycount' => 0, 'ptime' => $myarrline[9], );
$newslist[$i]=$newslistarr;
}
//--------------------------------------------
这样也不行,格式化后结果:{"ret":0,"data":{"newslist":[],"totalnum":5},"msg":"ok"} 数组是空的。
无奈了,php语法究竟怎么写呢?

$newslist[$i] = $newsobj
你的多了个>

$newslist[$i] = $newsobj
你的多了个>
是的,我这里写错了,不过改正之后,还是不行
格式化后结果:{"ret":0,"data":{"newslist":[],"totalnum":5},"msg":"ok"} 数组是空的。

我已经放弃使用对象了,php里对象转数组效率太低!

终于整出来了!是php二维数组的语法格式不会啊,绕了很多弯路。十分感谢ohmygirl的帮忙!
把代码贴出来,供大家参考下:
//---------------------------------------------------------------

<?php//数据库信息编码的设置header("Content-type: text/html; charset=utf-8");?> <?php/************************************************************** * *	使用特定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);	return urldecode($json);}?><html>  <head>    <title>校园移动APP    </title>    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">  </head>  <body  leftmargin="0" topmargin="0" marginwidth="0" marginheight="0">    <table  width="890"  border="0" cellpadding="4" cellspacing="3" align="left" style="font-size:13px">      <tr><td>          <hr>导航---【采集结果】2:          <br>          <br>          <br>          <br><?php		//信息采集地址,参数是默认采集当前年份下10条信息 系统限制到最大50条信息						 $weblink="http://newinfor.lnmec.net.cn/news/getnews.asp?lx=74&topnum=5";				// echo $weblink;				 $mystr=file_get_contents($weblink);//每次10条!				 $myarrnews=array();				 //拆分分条新闻条件成数组				 $myarrnews =explode("||**||", $mystr);			//	   print_r ($myarrnews);              //该分类ID下前10条数据的集合				 //拆分具体内容条件成数组    				 /*				    下面对采集的数据集合进行描述					0:代表采集信息数量					1:信息原始ID号 (新闻分类ID号)					2:信息标题					3:信息类别					4:信息内容					5:是否首页图片					6:访问量					7:发布人					8:副标题					9:信息发布时间				 */         $obj=array();				 $obj["ret"]=0;	                  $newslist=array();	 				          for ($i=0;$i<count($myarrnews);$i++){                       echo "-----------------";				   $myarrline=array();		            $myarrline =explode("||%%||", $myarrnews[$i]);                 print_r($myarrline);                     //每个新闻各个字段的集合,例如:Array ( [0] => 10 [1] => 2166 [2] => 创新工会工作 创建模范职工之家 [3] => 学院新闻 [4] =>					 if ($myarrnews[$i]!="") {             echo "No$i";               $newslist[$i]['title']=$myarrline[2] ;               $newslist[$i]['commentcount']=0 ;              $newslist[$i]['source']=$myarrline[7] ;              $newslist[$i]['nid']=$myarrline[1] ;              $newslist[$i]['replycount']=0;              $newslist[$i]['ptime']=$myarrline[9] ;              }            else					  {					    echo "在当前年度内没有采集到数据!可能是本站没有最新数据信息!"; 					  }                       }          $data=array("newslist"=>$newslist,"totalnum"=>5);           $obj["data"]=$data; 				  $obj["msg"] ="ok";  								  print_r(JSON($obj));           				  $newslist=NULL;				  $obj=NULL;           ?>          </td>      </tr>    </table>  </body></html>
登录后复制

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

仓库:如何复兴队友
1 个月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.能量晶体解释及其做什么(黄色晶体)
2 周前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒险:如何获得巨型种子
1 个月前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

在Laravel中使用Flash会话数据 在Laravel中使用Flash会话数据 Mar 12, 2025 pm 05:08 PM

Laravel使用其直观的闪存方法简化了处理临时会话数据。这非常适合在您的应用程序中显示简短的消息,警报或通知。 默认情况下,数据仅针对后续请求: $请求 -

构建具有Laravel后端的React应用程序:第2部分,React 构建具有Laravel后端的React应用程序:第2部分,React Mar 04, 2025 am 09:33 AM

这是有关用Laravel后端构建React应用程序的系列的第二个也是最后一部分。在该系列的第一部分中,我们使用Laravel为基本的产品上市应用程序创建了一个RESTFUL API。在本教程中,我们将成为开发人员

php中的卷曲:如何在REST API中使用PHP卷曲扩展 php中的卷曲:如何在REST API中使用PHP卷曲扩展 Mar 14, 2025 am 11:42 AM

PHP客户端URL(curl)扩展是开发人员的强大工具,可以与远程服务器和REST API无缝交互。通过利用Libcurl(备受尊敬的多协议文件传输库),PHP curl促进了有效的执行

简化的HTTP响应在Laravel测试中模拟了 简化的HTTP响应在Laravel测试中模拟了 Mar 12, 2025 pm 05:09 PM

Laravel 提供简洁的 HTTP 响应模拟语法,简化了 HTTP 交互测试。这种方法显着减少了代码冗余,同时使您的测试模拟更直观。 基本实现提供了多种响应类型快捷方式: use Illuminate\Support\Facades\Http; Http::fake([ 'google.com' => 'Hello World', 'github.com' => ['foo' => 'bar'], 'forge.laravel.com' =>

在Codecanyon上的12个最佳PHP聊天脚本 在Codecanyon上的12个最佳PHP聊天脚本 Mar 13, 2025 pm 12:08 PM

您是否想为客户最紧迫的问题提供实时的即时解决方案? 实时聊天使您可以与客户进行实时对话,并立即解决他们的问题。它允许您为您的自定义提供更快的服务

Laravel中的通知 Laravel中的通知 Mar 04, 2025 am 09:22 AM

在本文中,我们将在Laravel Web框架中探索通知系统。 Laravel中的通知系统使您可以通过不同渠道向用户发送通知。今天,我们将讨论您如何发送通知OV

解释PHP中晚期静态结合的概念。 解释PHP中晚期静态结合的概念。 Mar 21, 2025 pm 01:33 PM

文章讨论了PHP 5.3中引入的PHP中的晚期静态结合(LSB),从而允许静态方法的运行时分辨率调用以获得更灵活的继承。 LSB的实用应用和潜在的触摸

PHP记录:PHP日志分析的最佳实践 PHP记录:PHP日志分析的最佳实践 Mar 10, 2025 pm 02:32 PM

PHP日志记录对于监视和调试Web应用程序以及捕获关键事件,错误和运行时行为至关重要。它为系统性能提供了宝贵的见解,有助于识别问题并支持更快的故障排除

See all articles