json数据在前端(javascript)和后端(php)转换

学习目的:前后端数据交换

思路:

json数据格式是怎么样?

后端各种语言怎么将自己内容转换成json格式的内容?

前端怎么接收json数据?有几种方式?

js中怎么将json数据转换成js中的数组,对象来使用?

遇到问题

用ajax接收数据直接赋值给了变量,发现里面是一个数组。

在php中不知道怎么传递数据?(或者说ajax的xmlhttp.responseText是怎么获取后端数据的?)

php中把对象和数组转换成json数据格式的方法。

学习过程:

1.json知识普及

从结构上看,所有的数据最终都可以分成三种类型: 
第一种类型是scalar(标量),也就是一个单独的string(字符串)或数字(numbers),比如“北京”这个单独的词。 
第二种类型是sequence(序列),也就是若干个相关的数据按照一定顺序并列在一起,又叫做array(数组)或List(列表),比如“北京,东京”。 
第三种类型是mapping(映射),也就是一个名/值对(Name/value),即数据有一个名称,还有一个与之相对应的值,这又称作hash(散列)或dictionary(字典),比如“首都:北京”。 
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,它的规则非常简单: 
1) 并列的数据之间用逗号(“,”)分隔。 
2) 映射用冒号(“:”)表示。 
3) 并列数据的集合(数组)用方括号("[]")表示。 
4) 映射的集合(对象)用大括号(“{}”)表示。 
按照这个规则可以作以下理解: 
1.数组用“[]”创建,对象用“{}”创建,并且使用Json基本都是用[]或者{}创建的数组或对象,否则一个普通的字符串是没有意义的; 
2.无论是数组还是对象,之间的元素都用“,”隔开; 
3.对象内部,(属性的)名称和值用“:”隔开,并且必须要用“:”隔开,不可单独存在属性名或者值; 
4.对象和数组可以互相嵌套,即数组中的一个元素可以是一个对象也可以是一个数组,同理对象中的一个属性的值可以是一个对象也可以是一个数组。

2.Json在Ajax中的应用 
客户端可以给服务器端通过地址栏或者post很容易的提交数据,但是服务器端处理完数据之后,将计算的结果信 息回传给客户端时就存在了一定的难度,特别是数据量较大时。这个时候数据的格式成了关键,按照某种格式可以很方便的进行数据的组装,然后可以很方便的进行 解析。使用Json便是一种很好的策略。在服务器端,按照Json的格式拼装好一个字符串,响应给客户端。客户端如何进行解析呢?一般有两种策略(两种策 略的名称是自己给的名字,不一定很合理,但是思路应该是没有问题的):

1.直接解析 
var json = eval(‘(‘ + result + ‘)‘); 
通过上面这个表达式,就完成了将服务器端响应给客户端的Json格式的字符串解析成了一个Json(格式的)对象,名称为“json”,通过“json.”或者“json[]”的方式便可进行数据访问。 
2.间接解析 
var json = "r=" + result; 
eval(json); 
当然上面行代码可以合并为:eval("r=" + result); 
通过上面的计算,也可以将服务器端响应给客户端的Json格式的字符串解析成了一个Json(格式的)对象,但是该对象名称为“r”,通过“r.”或者“r[]”的方式可进行数据访问。 
总结:Json是一种简单的数据交换格式,它几乎可以很好的代替xml让服务器之间灵活的交换数据。

3.JavaScript中的数组和对象 
在JavaScript中,通常用[]创建的数据格式称为数组,用{}创建的东西称为对象。

有一个数组a=[1,2,3,4],还有一个对象a={0:1,1:2,2:3,3:4},运行alert(a[1]),两种情况下的运行结果是相同的!这就是说,数据集合既可以用数组表示,也可以用对象表示,那么到底该用哪一种呢? 
其实数组表示有序数据的集合,而对象表示无序数据的集合。如果数据的顺序很重要,就用数组,否则就用对象。 
当 然,数组和对象的另一个区别是,数组中的数据没有“名称”(name),对象中的数据有“名称”(name)。但是问题是,很多编程语言中,都有一种叫做 “关联数组”(associativearray)的东西。这种数组中的数据是有名称的。比如在javascript中,可以这样定义一个对象: 
var a={"城市":"北京","面积":16800,"人口":1600}; 
但是,也可以定义成一个关联数组: 
var a = new Array(); 
a["城市"]="北京"; 
a["面积"]=16800; 
a["人口"]=1600; 
这 样一来好像数组和集合就没有区别了,其实不是,在Javascript语言中,关联数组就是对象,对象就是关联数组。通过第二种方式创建的数组和通过[] 方式创建的数组是有很大的区别的,在第二个方式创建的“数组”中,也可以和第一种方式类似,通过“a.城市”来得到“北京”,“a.人口”来得到 “1600”,但是它和第一种方式创建的对象又是有区别的,通过第一种方式定义的a是没有length属性的,二通过第二种方式定义的a有,可是值为0, 可见里面的差别还是有的,要想具体搞清楚,恐怕得看看底层的一些实现代码了。

4.PHP数组和Json之间的转换

之所以要用到Json,很多时候是因为使用ajax对象时,程序与JS函数之间的数据交互。因为JS不认识PHP中的数组,PHP也不认识JS中的数组或对象。Json很好的解决了这个问题。

PHP中将数组转变成Json 
强大的PHP已经提供了内置函数:json_encode() 和 json_decode()。很容易理解,json_encode()就是将PHP数组转换成Json。相反,json_decode()就是将Json转换成PHP数组。

$array = array("name" => "Eric","age" => 23);   echo json_encode($array);

程序将打印出 :  {“name”:”Eric”,”age”:23}

$array = array(0 => "Eric", 1 => 23);   echo json_encode($array);

程序将打印出 :["Eric",23]

以上两个例子可以看出,如果PHP数组的键都是数字,那么json_encode()返回一个数组形式的Json,如果PHP数组的键全是字符串。那么json_encode()就会返回一个对象形式的Json。刚已经说过。两者在js中的调用是不同的。

其它后端语言应该都会有对应的函数来处理json数据。

json数据在前端(javascript)和后端(php)转换

时间: 2024-11-06 22:44:34

json数据在前端(javascript)和后端(php)转换的相关文章

用easyui从servlet传递json数据到前端页面的两种方法

用easyui从servlet传递json数据到前端页面的两种方法 两种方法获取的数据在servlet层传递的方法相同,下面为Servlet中代码,以查询表中所有信息为例. //重写doGet方法 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stu

如何解析json字符串及返回json数据到前端

前言:最近需要实现的任务是:写若干个接口,并且接口中的请求数据是json格式,然后按照请求参数读取前端提前整理好的json数据,并且将json数据返回到服务器端. 主要的工具:Gson  2.8.2 项目支撑:springboot maven 0.前导--了解一下基本的json语法 JSON是一种类似 XML的语言,是用了存储和交换文本信息的语法.它的全称为JavaScript Object Notation(JavaScript 对象表示法).与xml对比,它更小.更快,更易解析. 想要更好的

Js -----后台json数据,前端生成下载text文件

需要引入 <script src="/assets/libs/single_file/jquery.min.js"></script> <script src="/assets/libs/layer/layer.js"></script> 借鉴 张鑫旭文章 http://www.zhangxinxu.com/wordpress/2017/07/js-text-string-download-as-html-json-f

基于Ajax技术的前后端Json数据交互方式实现

前言 使用浏览器访问网站是日常生活中必不可少的一件事情,当我们在浏览器地址栏中输入网址后会看到网站的内容,那么这个过程中发生了什么?下面简单介绍下浏览器访问网站过程. 第一步:浏览器向DNS服务器发起DNS请求,DNS服务器解析域名后返回域名对应的网站服务器IP地址第二步:浏览器获取IP地址后向网络服务器发送一个HTTP请求第三步:网络服务器解析浏览器的请求后从数据库获取资源,将生成的html文件封装至HTTP 响应包中,返回至浏览器解析 下图抓包显示了访问"www.baidu.com"

使用前端使用jQuery获取 在apsx页面的page_load方法直接返回json数据

工作中遇到直接使用webform中的page_load()的方法直接返回json结果 但是直接使用Response.Write("");这个方法返回的结果是字符串,在前端获取的是字符串,不能直接转为json数据 大概思路是在后端page_load()将object 序列号成json格式的字符串 前端将字符串反序列化成json对象 后端代码: protected void Page_Load(object sender, EventArgs e) { var jsonObject = n

SpringMVC - JSON数据交互

Json(JavaScript Object Notation),它是一种轻量级数据交换格式,格式简单,易于读写,目前使用特别广泛. 两种交互模式 ① 请求json.输出json,要求请求的是json串,所以在前端页面中需要将请求的内容转成json,不太方便.② 请求key/value.输出json.此方法比较常用. @RequestBody 与 @ResponseBody ● @RequestBody:接收用户传入json串转成pojo 用于读取http请求的内容(字符串),通过Springm

如何封装JSON数据

最近在写接口,用到的请求报文和响应报文都是json数据,因为项目中的json对象都是封装好的,为了弄懂其中的原理,所以就写代码理解一下,这个随笔非常基础,肯定有很多不足,主要是为了记录一下自己的学习过程. 如果有这样一个需求,应该怎么用代码处理? 要创建这样一个JSON文本  :   { "person":{ "phone" :["12345678", "87654321"], // 数组 "name" :

SoapUI对于Json数据进行属性值获取与传递

SoapUI的Property Transfer功能可以很好地对接口请求返回的数据进行参数属性获取与传递,但对于Json数据,SoapUI会把数据格式先转换成XML格式,但实际情况却是,转换后的XML格式往往根本没法用Xpath形式获取到指定的数据了.因此只能用Script脚本形式了. {"addUsersToDirectoryResponse":{"addUserToDirectoryResponse":[{"ack":"Succes

前端Ajax传递Json数据,后端处理两种方式

在这里只讨论在前端通过Ajax远程传输Json数据的,不讨论通过form的形式传递数据 第一种方式: 前端传递过来的数据刚好和我们的bean实体对象属性一致,则可以使用对象的形式接受. 前端写法: 1 $().ready(function(){ 2 var obj = JSON.stringify({'userNo':'121589','processId':'15','processName':'测试审批','description':'这是一个测试'}); 3 alert(obj); 4 5