JSON的全称是”JavaScript Object Notation”,意思是JavaScript对象表示法,它是一种基于文本,独立于语言的轻量级数据交换格式。
XML也是一种数据交换格式,为什么没有选择XML呢?因为XML虽然可以作为跨平台的数据交换格式,但是在JS(JavaScript的简写)中处理XML非常不方便,同时XML标记比数据多,增加了交换产生的流量,而JSON没有附加的任何标记,在JS中可作为对象处理,所以我们更倾向于选择JSON来交换数据。
简单地说,JSON可以将JavaScript对象中表示的一组数据转换为字符串,然后就可以在函数之间轻松地传递这个字符串,或者在异步应用程序中将字符串从Web客户机传递给服务器端程序。
json数据的编解码
- json_encode():编码json数据
- json_decode():解码json数据
访问某个api,往往会收到编码后的json数据,这个时候直接输出,有可能是一堆肉眼无法理解的乱码,所以我们第一步先要做还原数据的工作,也就是解码数据:
$url='https://xxx.api.com';
$resData=file_get_contents($url);
$resJson=json_decode($resData);
json数据的再组合
{"code":200,
"msg":"success",
"data":{"date":"2022-04-26",
"news":["1、国家航天局:中国将着手组建近地小行星防御系统,应对近地小行星撞击威胁。外交部:旨在应对全人类面临的共同风险;","2、人社部:参加个人养老金制度可享受国家税收优惠政策;","3、四川绵阳:5月20日起,业主可申请提取本人及配偶住房公积金用于电梯增设;兰州:取消住房公积金再次申贷时间限制,调整二套房认定规则;","4、25日,A股三大指数集体收跌,沪指重挫逾5%失守3000点,两市超4600股下跌,其中有683只跌停;","5、河南南阳24日晚遭暴雨袭击,最大降水量196.7毫米,有道路积水致临街商铺被淹,居民家中雨水倒灌,已启动防汛三级应急响应;","6、港媒:香港葵涌货柜码头5辆货车25日凌晨起火爆炸,初步认为起火原因可疑,港警刑事调查队跟进;","7、俄空天军研究院火灾事故已造成17人遇难,总过火面积约为1000平方米;","8、韩国候任总统尹锡悦:中美紧张局势对韩国可能是机遇,也可能是风险,如被邀请加入美澳印日的“四方安全对话“,“将考虑加入“;","9、俄媒:俄罗斯批准了近200个外国品牌的“水货“清单,苹果和特斯拉等产品也在清单内;俄军官:“萨尔马特“洲际导弹可配数枚高超音速导弹,拟年内入役;","10、美国西南部大规模野火蔓延3州,大量民众被疏散,已投入上千人灭火,已致至少1死,15名消防员受伤;","11、日本东电25日开始整修海底隧道,为福岛核污水排海作准备,日本政府计划于2023年春开始排放;","12、外媒:推特开始与马斯克进行交易谈判。此前,马斯克向推特股东提供了收购提案的融资细节;","13、当地24日,美国务卿和防长在乌克兰会见了泽连斯基:承诺将提供7亿多美元的直接和间接军事援助,美外交官将于本周返回乌境内;","14、乌克兰删除反法西斯宣传片中和希特勒、墨索里尼并列的日本天皇,并向日本道歉:希望日本继续帮助乌克兰;","15、马克龙以58.54%的得票率赢得法国总统选举:法国多地爆发抗议,巴黎街头骚乱横行,示威者与警方发生冲突,一汽车冲向警察,警方开枪打死两人;"],
"weiyu":"【微语】有梦就该勇敢去追,这一路你可以哭,但你不能怂。",
"image":"https://file.alapi.cn/60s/202204261650906003.png",
"head_image":"https://file.alapi.cn/60s/202204261650906003_head.png"},
"time":1650989323,
"log_id":377610353661550592
}
对于json数据种的文本,我们可以利用这样的格式直接输出:
$resWeiyu = $resJson -> data -> weiyu;
对于数组类型的数据,如果是需要将其插入至页面或者保存到文章当中的话,我们需要对数据进行一下遍历,遍历的同时可以为其添加一些额外的元素,比如用p元素包裹数组中的每个字段:
foreach( $resNews as $arr){
$resPost.='<p>'.$arr.'</p>';
}
遍历之后,我们也可以继续组合其他的单一文本数据:
$resPost.='<p>'.$resWeiyu.'</p>';
尝试发布组合后的数据
在wordPress中,函数wp_insert_post用于插入或者更新一篇新的文章,将组合后的数据传递给wp_insert_post,就可以实现一篇文章的自动发布:
$my_post = array(
'post_title' => substr(date("Y-m-d"), 2).' 60秒读懂世界',
'post_content' => $resPost ,
'post_status' => 'publish',
'post_author' => 1,
);
wp_insert_post( $my_post );