json数据在前端(javascript)和后端(php)转换
第一种类型是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)转换相关推荐
- 关于jsp返回json数据给前台javascript
在web开发中,很多地方涉及到前后端数据交互,对于数据的处理很多可以放在前端javascript中进行处理,处理后将结果传给后端服务器,前台传送数据给后端,最方便的直接可以用jquery中对ajax封 ...
- 如何解析json字符串及返回json数据到前端
前言:最近需要实现的任务是:写若干个接口,并且接口中的请求数据是json格式,然后按照请求参数读取前端提前整理好的json数据,并且将json数据返回到服务器端. 主要的工具:Gson 2.8.2 ...
- json数据解析(json数据解析 前端)
JAVA为什么要返回JSON数据?JAVA为什么要返回JSON数? print( String()); 这样在前台页面就可以通过eval(data.List)获取到. 输出 String()就可以看到 ...
- flask返回json数据到前端_小白学Flask第六天| abort函数、自定义错误方法、视图函数的返回值...
点击蓝色字关注我们! 一个正在努力变强的公众号 本文内容: 1. abort函数的使用 2. 自定义错误处理方法 3. 设置响应信息的方法 4. 返回json数据的方法 abort函数的使用 abor ...
- java后端如何主动发数据到前端_javaweb把后端数据返回到前端
``` 第一步 先写公共查询类 public static List executeQuery(String sql, Object[] params) { List list = new Array ...
- 通过response返回json数据到前端
1. response.setCharacterEncoding("UTF-8");response.setContentType("application/json&q ...
- Spring Boot笔记-get请求发送json数据(方便前端vue解析)
目录 基本概念 代码与实例 基本概念 这里有一个思路,后端只发送Json数据,前端vue去解析.这样的话,就可以做到前后端分离,耦合性就很低了. 代码与实例 程序运行截图如下: 得到后,使用vue去解 ...
- Java处理JSON数据返回到前端的反斜杠
一.场景简述 在写后端返回JSON数据到前端的时候,遇到了前端一直无法获得后端传输的数据,但实际已经后端已经传输到前端了.在看前端获取到后端返回的数据的时候发现JSON中含有反斜杠,如下图 想必一定是 ...
- java $.getjson_JQuery 获取json数据$.getJSON方法的实例代码
jQuery系列 第八章 jQuery框架Ajax模块 第八章 jQuery框架Ajax模块 8.1 jQuery框架中的Ajax简介 Ajax技术的核心是XMLHTTPRequest对象,该对象是A ...
最新文章
- 通过shell将*.txt文本内容批量录入mysql
- CSDN湘苗培优,打造高素质技术人才
- Memcached在Asp.net下的应用
- python发邮件实例_python 发邮件实例
- cesium学习之环境搭建
- 如何使用SAP C4C Repository Explorer里的BO test shell
- 人脸识别及对比_没有“色彩对比可及性的神话”
- 宿主机进程挂载到容器内_迄今为止最严重的容器逃逸漏洞:Docker cp命令漏洞分析(CVE201914271)...
- 手机扫描到WiFi时,WiFi站点知道吗?
- delphi 联合体_校园动态 | 西安市碑林区大学南路小学“名校+”教育联合体召开“合木论坛”...
- C/C++[sort( )]排序
- Python 定时任务框架
- 华为服务器如何修改ip地址,华为路由器IP地址设置问题-192.168.1.1进不去
- 人工智能课程设计——八皇后问题的求解算法比较
- CMMI 认证为什么要提前准备?评估方式是怎样的?
- The-Swift-2.0-Programming-Language-playground
- mysql 中文截取_中文字符串截取
- 公众号如何获得关注粉丝openid?
- 《奇迹课程》练习手册
- 开发web、app应用实战中用到的资料汇总
热门文章
- 线程安全问题产生的原因
- 配置React的Babel 6和Webpack 2环境
- Oracle:PL/SQL 中如何使用Array
- C#代码像QQ的右下角消息框一样,无论现在用户的焦点在哪个窗口,消息框弹出后都不影响焦点的变化,那么有两种方法...
- phpstorm 10 修改背景图片和字体
- 水晶报表设置FiledObject支持HTML格式的数据
- 面部表情自动识别技术及在游戏行业的应用
- 整体思考自动化测试发展和价值回报
- 全面剖析linux【bind】服务お理论篇
- 8张图让你一步步看清 async/await 和 promise 的执行顺序