网站首页 > 技术文章 正文
1、为什么利用json传输数据?
xml数据生成过于复杂
xml数据解析过于复杂
2、关于json介绍
对象是属性的无序集合
在js中, 可以使用{}模拟这个集合
语法:
var json={属性:属性值,属性:属性值}
注意:属性可加可不加引号(包括单引号和双引号)
3、用json个表示具体的信息
(1)表示一个人的信息
var person = {name:'zhangsan',age:30};
alert(person.name+person.age); //显示张三30
(2)表示多个人的信息
var data=[{
name:'zhangsan',
age:30
},{
name:'lisi',
age:18
},{
name:'wangwu',
age:25
}];
for(var i=0;i<data.length;i++){
document.write(data[i].name+data[i].age);
document.write('<hr>');
}
4、在php中如何使用json
json_encode(); //json编码
json_decode(); //json解码
mixed json_decode ( string $json [, bool $assoc = false] )
json 待解码的 json string 格式的字符串。
assoc 当该参数为 TRUE 时,将返回 array 而非 object 。
默认返回一个对象
$obj=json_decode($str);
加上参数true表示数组
$arr=json_decode($str,true);
生成json字符串
json表示大量数据, 在php中表示多个、大量的数据可以数组、对象来表示
也就是说, 在php, 如果想生成json字符串, 必须从数组、对象上生成。
复合数据类型:数组、对象
从数组中生成json字符串
$row=array('name'=>'lisi','age'=>30);
echo json_encode($row);
从对象中生成json字符串
class Person{
public $name='zhangsan';
public $age=20;
}
$p1=new Person();
$str=json_encode($p1);
关于json保存中文的问题
目前, json只支持utf-8, 如果想保存中文, 必须进行转码
$arr=array('name'=>'张三','age'=>30);
$arr['name']=iconv('gb2312','utf-8',$arr['name']);
echo json_encode($arr);
5、在javascript中json语法:
var str=xmlHttp.responseText;
var json=eval("("+ str +")"); 返回是json对象
var json=eval(str); 返回是json数组对象
理解:eval()函数可以将php中的json字符串转换为javascript可执行的json对象(包括数组对象)
6、案例:
php代码:
$row:一维数组 生成一个json格式的字符串
$data:二维数组 生成一个json数组格式的字符串
<?php
$row=array('username'=>'lisi','password'=>'222222');
echo json_encode($row); 输出:{"username":"lisi","password":"222222"}
/*
$data=array(
array('name'=>'zhangsan','age'=>18),
array('name'=>'lisi','age'=>30)
);
echo json_encode($data);//输出:[{"name":"zhangsan","age":18},{"name":"lisi","age":30}]
*/
?>
HTML代码:
<script language="javascript" src="public.js"></script>
<script>
var xhr=createxhr();
xhr.open('post','demo05.php');
xhr.setRequestHeader('Content-type','application/x-www-form-urlencoded');
xhr.onreadystatechange=function(){
if(xhr.readyState==4 && xhr.status==200){
var value=xhr.responseText; //返回的是字符串
//(1)
var json=eval('('+value+')'); //返回是json对象
alert(json.username+json.password);
//(2)
//var json=eval(value); //返回是json数组对象
//alert(json[0].name+json[0].age);
}
};
xhr.send(null);
</script>
理解:
var json=eval('('+value+')'); 主要是针对关联数组
返回:"{name:'zhangsan',age:18}"
访问方式:json.username+json.password
var json=eval(value); 主要是针对索引数组
返回:"[{name:'zhangsan',age:18},{name:'lisi',age:20}]"
访问方式:json[0].name+json[0].age
注意:索引数组的解析也可以采用 var json=eval(value);
查询数据表中所有数据并生成json字符串返回
php代码:
<?php
//查询goods表中所有数据并返回
$sql="select name,price from goods order by id desc";
mysql_connect('localhost','root','111111');
mysql_select_db('shop');
mysql_query('set names gb2312');
$result=mysql_query($sql); //发送sql语句
$num=mysql_num_rows($result); //总行数
$data=array();
for($i=0;$i<$num;$i++){
$row=mysql_fetch_assoc($result);
$row['name']=iconv('gb2312','utf-8',$row['name']);
$data[]=$row;
}
mysql_close();
echo json_encode($data);
PHP代码:
<style>
tr{
background-color:#ffffff;
height:30px;
font-size:12px;
}
</style>
<script language="javascript" src='public.js'></script>
<script>
window.onload=function(){
var xhr=createxhr();
xhr.open('post','demo04.php');
xhr.setRequestHeader('Content-type','application/x-www-form-urlencoded');
xhr.onreadystatechange=function(){
if(xhr.readyState==4 && xhr.status==200)
var value=xhr.responseText;
var data=eval(value);
for(var i=0;i<data.length;i++){
//创建行元素
var tr=document.createElement('tr');
//创建序号td元素
var tdID=document.createElement('td');
tdID.innerHTML=i+1;
//创建名称td元素
var tdName=document.createElement('td');
tdName.innerHTML=data[i].name;
//创建价格td元素
var tdPrice=document.createElement('td');
tdPrice.innerHTML=data[i].price;
//将三个td追加到tr元素
tr.appendChild(tdID);
tr.appendChild(tdName);
tr.appendChild(tdPrice);
document.getElementsByTagName('TBODY')[0].appendChild(tr);
}
};
xhr.send(null);
}
</script>
<table id='tbData' width="800" cellspacing="1" cellpadding="4" bgcolor="#336699">
<tr>
<td>序号</td>
<td>商品名称</td>
<td>商品价格</td>
</tr>
</table>
猜你喜欢
- 2024-11-11 php+json+mysql实现前后端分离(php vue前后端分离)
- 2024-11-11 PHP中json解析失败原因, json_decode返回null解析失败原因
- 2024-11-11 如何使php的数组传递到js中(如何使php的数组传递到js中)
- 2024-11-11 Python操作JSON格式数据的技巧(python解析json数据)
- 2024-11-11 Linux(centos)用yum方式安装php最新版
- 2024-11-11 PHP 8.3 正式发布!(php8.0新功能)
- 2024-11-11 使用json_encode打印中文字符并且格式化(php代码)
- 2024-11-11 PhpStorm 2022.2 已发布(phpstorm2018)
- 2024-11-11 你不知道的PHP 8.3版本和它的一些有趣的变化
- 2024-11-11 通过WordPress HTTP API 获取json内容并解析
- 最近发表
-
- 使用Knative部署基于Spring Native的微服务
- 阿里p7大佬首次分享Spring Cloud学习笔记,带你从0搭建微服务
- ElasticSearch进阶篇之搞定在SpringBoot项目中的实战应用
- SpringCloud微服务架构实战:类目管理微服务开发
- SpringBoot+SpringCloud题目整理
- 《github精选系列》——SpringBoot 全家桶
- Springboot2.0学习2 超详细创建restful服务步骤
- SpringCloud系列:多模块聚合工程基本环境搭建「1」
- Spring Cloud Consul快速入门Demo
- Spring Cloud Contract快速入门Demo
- 标签列表
-
- cmd/c (57)
- c++中::是什么意思 (57)
- sqlset (59)
- ps可以打开pdf格式吗 (58)
- phprequire_once (61)
- localstorage.removeitem (74)
- routermode (59)
- vector线程安全吗 (70)
- & (66)
- java (73)
- org.redisson (64)
- log.warn (60)
- cannotinstantiatethetype (62)
- js数组插入 (83)
- resttemplateokhttp (59)
- gormwherein (64)
- linux删除一个文件夹 (65)
- mac安装java (72)
- reader.onload (61)
- outofmemoryerror是什么意思 (64)
- flask文件上传 (63)
- eacces (67)
- 查看mysql是否启动 (70)
- java是值传递还是引用传递 (58)
- 无效的列索引 (74)