getjson php 函数,PHP读写JSON文件以及jQuery的getJSON函数用法

在写的音乐网站中用到保存用户歌单功能,即用户登录后可以显示该用户之前保存的歌单,开始的思路是使用数据库来保存,后来为了方便于是考虑使用json数据格式来保存歌单,这样也和播放器插件的json参数比较契合.

读取JSON文件<?php

$filename = "chation99.json";

$json_string = file_get_contents($filename);

$data = json_decode($json_string, true);

// 显示出来看看

var_dump($data);

echo '
';

print_r($data);

echo '
';

?>

这里我们用到file_get_contents(path),这个函数来打开我们的json文件,然后用json_decode()函数来解析json数据,运行刚才的代码后,结果如下:

第一次输出 var_dump() :

3965_0.jpg

第二次输出 print_r() :

3965_1.jpg

这样表明我们已经成功的解析了从文件导入的json数据, 接下来我们对这些数据进行一些操作

PHP操作JSON数据

删除json数据元素

如果我们要操作JSON数据的话,必须先将JSON数据转化为数组模式,即json_decode()for($i=0;$i

if($data[$i]['title']=="顽固"){

echo $data[$i]['title'];

array_splice($data,$i,1);

break;

}

}

这段代码的意思即,我们查找json数据中如果有title的值为”顽固”的话,显示出这个title,然后用array_splice()函数来删除这个数组元素.

array_splice(array,array[index],code);

这个函数的参数,第一个接受一个数组,第二个接受一个数组的索引值,第三个参数表示要删除的个数(从index向后计算,1代表只删除当前索引值的元素,无参数表示index索引往后所有全部删除),这个函数的好处是,可以在中间的元素被删除后后面的元素自动向前补缺,不会存在空洞现象.

添加json数据元素$index = sizeof($data);

$data[$index]['mp3'] = "music/五月天-好好.mp3";

$data[$index]['oga'] = "";

$data[$index]['title'] = "好好";

$data[$index]['artist'] = "五月天";

$data[$index]['rating'] = "3";

$data[$index]['buy'] = "#";

$data[$index]['price'] = "";

$data[$index]['duration'] = "03:19";

$data[$index]['cover'] = "pic/userHead/bq2.jpg";

var_dump($data);

首先将data数组的长度缓存到一个index值里面,如果不这样做在接下来的添加过程中数组长度会逐个增大,

然后为索引值为长度的元素逐个添加各个属性,就完成了添加元素的操作

PHP写JSON文件$json_string = json_encode($data);

file_put_contents('chation99.json', $json_string);

先将data数组用json_encode()函数标准化为json数据字符串,然后将字符串写入到文件即可

file_put_contents(filename,filestring);

jQuery的getJSON函数

jQuery的getJSON函数属于jq Ajax的一种,异步的方式载入一个JSON文档

b9eb943c64228e1a1d1a82c8edab0d30.png

这里 ,我们的音乐网站上有一个播放器插件,需要一个json数据格式作为参数/* 初始化播放器 */

function player(username) {

$.getJSON("data/json/"+username+".json",function(data){

$('#musicplayer').ttwMusicPlayer(data,

{

currencySymbol: "",

buyText: " 下载",

tracksToShow: 10,

autoPlay: false,

ratingCallback: function (index, playlistItem, rating) {

},

jPlayer: {}

}

);

});

}

这样我们将username作为参数传入,可以保证不同的用户使用该播放器时载入相应的他们的歌单

接下来我们用JavaScript操作json数据的方式来为用户添加歌曲进歌单/* 从List收藏歌曲 */

function addByList(e){

//取得相应的歌曲信息

var tr = e.parentNode.parentNode,

img = tr.firstChild.firstChild,

url = img.getAttribute("src");

var name = tr.childNodes[1].innerHTML,

art = tr.childNodes[2].innerHTML;

var user = getCookie("music_identify");

var phpurl = "data/userlist/addmusic.php?name=" + name + "&art=" + art + "&cover=" + url + "&user=" + user;

if(user != ""){

e.setAttribute("href",phpurl);

}else{

removeElem("warningTip");

var tips = "登录后才能进行收藏或者下载 ! ";

var form = document.getElementById("music_box_play");

form.insertBefore(alertBox(tips, "warning"), form.childNodes[0]);

e.removeAttribute("target");

}

}

addmusic.PHP的代码如下<?php

//取得用户信息

$music_name = $_GET['name'];

$music_art = $_GET['art'];

$music_cover = $_GET['cover'];

$user_name = $_GET['user'];

//打开相应JSON文件

$filename = "../json/".$user_name.".json";

$json_string = file_get_contents($filename);

$data = json_decode($json_string, true);

//添加数据

$index = sizeof($data);

$data[$index]['mp3'] = "music/".$music_art."-".$music_name.".mp3";

$data[$index]['oga'] = "";

$data[$index]['title'] = $music_name;

$data[$index]['artist'] = $music_art;

$data[$index]['rating'] = "5";

$data[$index]['buy'] = "#";

$data[$index]['price'] = "";

$data[$index]['duration'] = $music_art;

$data[$index]['cover'] = $music_cover;

//写入文件

$json_string = json_encode($data);

file_put_contents('../json/'.$user_name.'.json', $json_string);

echo '';

?>

这样添加的歌单在 测试过程中又一个问题,浏览器会把json文件自动缓存到本地,为了防止浏览器缓存JSON文件导致的歌单更新无效,我们需要给浏览器一个信号,即每次加载的json文件都是新文件,这里我们只需要在getJSON()函数里加上一个参数即可,参数可以是时间戳或者随机数/* 初始化播放器 */

function player(username) {

var date = new Date();

mark = {Time:date.toDateString(),Math:Math.random()};

$.getJSON("data/json/"+username+".json",mark,function(data){

//do something ...

});

}

这样就可以保证每次都是重新加载JSON文件了.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/488991.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

悬而未决的AI竞赛:全球企业人工智能发展现状

来源&#xff1a;德勤,智东西随着企业领袖逐渐将人工智能视为下一轮经济大扩张的重要推动力量&#xff0c;一种担忧错失良机的情绪在全球范围内日益蔓延。许多国家纷纷制定人工智能战略&#xff0c;通过资金投入、政策激励、人才发展和风险管理推进技术能力的发展。人工智能对于…

Science揭示:身体如何应对细菌的“群体感应”

电子显微镜下的假单胞菌细菌。图片来源&#xff1a;MPIIB / Volker Brinkmann来源&#xff1a;中国生物技术网众所周知&#xff0c;细菌感染并不会马上导致疾病&#xff0c;只有在它们大量出现时才会对身体造成威胁。近日&#xff0c;发表在《Science》上的一项研究中&#xff…

百度:2020年十大科技趋势

来源&#xff1a;6G俱乐部图片来源&#xff1a;百度2019&#xff0c;关于科技的鲜活记忆&#xff0c;正在快速变成时间洪流的一部分&#xff0c;也变成了我们读懂未来的钥匙。过去一年中&#xff0c;多技术融合正在加快&#xff0c;AI开发的门槛在迅速降低&#xff0c;产业智能…

美国计划让“人工智能”去搜寻外星人!

来源&#xff1a;科学解码据美国太空网近日报道&#xff0c;美国国家航空航天局&#xff08;NASA&#xff09;官员称&#xff0c;他们希望利用人工智能&#xff08;例如机器学习&#xff09;技术&#xff0c;分析大型望远镜等收集的数据&#xff0c;从而帮助搜寻外星生命&#…

三宝机器人怎么充电_巨人通力导致吉祥三宝+36号故障怪现象的又一因素

想必大家都有过这样的经历&#xff1a;在电梯故障频繁出现时&#xff0c;明明可以判断是哪里的问题&#xff0c;但事实却是让你感觉不可思议&#xff0c;并且排查过程颇为周折。今天和大家分享一下我经历的巨人通力GPS30K电梯出现的吉祥三宝故障的排查过程。下图为电梯控制柜铭…

《自然》展望2020年重大科学事件!中国有两个大计划安排上了

来源&#xff1a;科技日报图片来源&#xff1a;Nature官网&#xff08;不包括标注了来源的图片&#xff09;“千门万户曈曈日&#xff0c;总把新桃换旧符”&#xff01;在辞旧迎新之际&#xff0c;我们除了要埋头梳理过去一年的悲欢得失&#xff0c;也应抬头眺望新一年的星辰大…

vue aplayer 进度条无法拖动_Vue-rideo-player视频播放插件的使用

***** git项目地址&#xff1a; https://github.com/surmon-china/vue-video-player***** 参考文章&#xff1a; https://www.jianshu.com/p/532fc1d8c90c使用安装&#xff1a; npm install vue-video-player --save2. 在main.js入口文件中引入import VideoPlayer from vue-vid…

php流程控制作业题,php流程控制

一、get传值我们请求服务器下一步操作啊&#xff0c;都是用get进行传值&#xff0c;然后服务器用预定义变量数组$_GET&#xff0c;接受。二、流程控制1 三元运算符 ? :逻辑很简单&#xff0c;就是设置条件&#xff0c;条件成立就执行“&#xff1f;” 。条件不成立就执行”:…

JS中的call()和apply()方法(转)

转自&#xff1a;http://uule.iteye.com/blog/1158829 JS中的call()和apply()方法 博客分类&#xff1a; JS1、方法定义 call方法: 语法&#xff1a;call([thisObj[,arg1[, arg2[, [,.argN]]]]]) 定义&#xff1a;调用一个对象的一个方法&#xff0c;以另一个对象替换当前对象…

中国AI芯片产业发展白皮书:未来三年年均增长率超50%

来源&#xff1a;赛迪顾问《中国AI芯片产业发展白皮书》从AI芯片的定义及分类、发展过程与现状、应用机会、竞争格局、发展趋势等多角度全面剖析AI芯片的发展新态势、 技术演进及行业格局&#xff0c;旨在为业内相关企业把握行业发展动态、挖掘市场机遇&#xff0c;提供借鉴与参…

人工智能与经济生产力:期待进化,而不是革命

Illustration: Edmon de Haro来源&#xff1a; IEEE电气电子工程师尽管大肆宣传&#xff0c;人工智能仍需数年时间才能显著提高经济生产力。2016年&#xff0c;总部位于伦敦的Alphabet&#xff08;也是谷歌的母公司&#xff09;的子公司DeepMind Technologies报告称&#xff0c…

oracle 表 上限,Oracle分区表(Partition Table)的数量限制

Oracle分区表(Partition Table)的数量限制有朋友在我的留言板上问到这样一个问题:oracle分区表是不是有最大分区个数限制,我有一张大约20G的表,有好多分区(按时间),结果根据这个时间条件查询就报ORA-03113 end-of-file on communication channel错误,然后断开链接,硬件与网络都…

张恭庆院士:数学的意义(最全最牛的解释)

来源&#xff1a;数学严老师北京大学数学科学学院教授、中国科学院院士、第三世界科学院院士数学既是一种文化、一种“思想的体操”&#xff0c;更是现代理性文化的核心。马克思说&#xff1a;“一门科学只有当它达到了能够成功地运用数学时&#xff0c;才算真正发展了。”在前…

oracle 根据分隔符提取,oracle使用指定分隔符导出数据到文件

最近有需求要导出一个专业的详单&#xff0c;用于倒入sqlserver系统&#xff0c;要求用分隔符隔开各字段。一开始准备用toad查询出来在save as&#xff0c;但发现表太多&#xff0c;要一张一张表盯着&#xff0c;而且由于详单数据量大&#xff0c;查询导出占用了大量的客户端内…

vue mxgraph渲染xml页面_Vue的两个版本

Vue.js分为两个版本&#xff0c;简单来说就是一个是完整版vue.js&#xff0c;一个是非完整版vue.runtime.js&#xff1a;1. HTML的书写位置不同完整版&#xff1a;完整版的HTML书写的位置有两个&#xff0c;一个是直接在 *.html 文件中使用 Vue 语法&#xff0c;如下所示&#…

美智库发布报告:《美国在人工智能时代的行动蓝图》

来源&#xff1a;新美国安全中心12月17日&#xff0c;新美国安全中心发布报告《美国人工智能世纪&#xff1a;行动蓝图》&#xff0c;指出先进计算、量子科学、人工智能、合成生物学、5G、增材制造等技术的快速进步正在改变技术运行机制&#xff0c;其中人工智能将产生最广泛的…

四则运算01

编写随机生成30道小学数学题目&#xff1a; 源代码&#xff1a; package test; public class lianxi {String f(){int i (int)(Math.random()*10);int j (int)(Math.random()*10);if(i>j){int temp i;i j;j temp;}return ("("i"/"j")")…

2019-2021年中国AI芯片市场预测与展望数据

来源&#xff1a;赛迪顾问预计未来三年AI芯片市场规模仍将保持50%以上的增长速度&#xff0c;到2019年中国AI芯片市场规模将达到124.1亿元。从细分市场结构来看&#xff0c;云端训练芯片的比例仍然最大&#xff0c;但增速最慢&#xff0c;云端推断芯片与终端推断芯片市场在未来…

java. oracle 存储文件,oracle调用java类遍历磁盘文件

利用oracle自带的utl_file包可以访问磁盘文件&#xff0c;但有个限制--无法访问文件夹&#xff1f;什么意思呢&#xff1f;就是说oracle只能访问指定的文件&#xff0c;而不能访问文件夹下的未知文件。所以&#xff0c;如果要通过oracle去遍历某指定路径下的所有文件&#xff0…

python安装(原系统中已有python2)

由于项目中需要使用python3的特征&#xff0c;例如对中文的支持而不使用unicode&#xff0c;虽然一般装系统的时候会带有python2版本&#xff0c;但是还需要重新安装。这里给大家说下&#xff0c;不需要卸载python2&#xff0c;只需要重装python3即可。 下载python3.4&#xff…