zoukankan      html  css  js  c++  java
  • 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数据。 

    学透前端行业所有技术,玩遍北京周边所有城市。然后我会回到那个生我养我的地方,因为有亲人的地方才是家。
  • 相关阅读:
    如何将网格式报表打印成其它样式
    拥有与实力不相称的脾气是种灾难——北漂18年(23)
    8.8.1 Optimizing Queries with EXPLAIN
    mysql 没有rowid 怎么实现根据rowid回表呢?
    secondary index
    8.5.5 Bulk Data Loading for InnoDB Tables 批量数据加载
    mysql 中key 指的是索引
    8.5.4 Optimizing InnoDB Redo Logging 优化InnoDB Redo 日志
    8.5.3 Optimizing InnoDB Read-Only Transactions 优化InnoDB 只读事务
    8.5.1 Optimizing Storage Layout for InnoDB Tables InnoDB表的存储布局优化
  • 原文地址:https://www.cnblogs.com/windrainpy/p/3163281.html
Copyright © 2011-2022 走看看