致力于打造中国站长娱乐学习的免费资源站!官方合作QQ:283852481

广

您当前的位置:首页 > 教程 > 网页设计 > JavaScript/JQuery

招租联系QQ:283852481

JSON格式简介及一些对应函数

时间:2016-11-20  来源:互联网  

JSON格式:http://www.json.org/

JSON建构有两种结构:

2.值的有序列表(An ordered list of values)。在大部分语言中,它被理解为数组(array)。,JSON 可以将 javascript 对象中表示的一组数据转换为字符串,然后就可以在函数之间轻松地传递这个字符串,或者在异步应用程序中将字符串从 web 客户机传递给服务器端程序。这个字符串看起来有点儿古怪,但是 JavaScript 很容易解释它,而且 JSON 可以表示比"名称 / 值对"更复杂的结构。例如,可以表示数组和复杂的对象,而不仅仅是键和值的简单列表。

这个示例非常基本,而且实际上比等效的纯文本"名称 / 值对"占用更多的空间:

但是,当将多个"名称 / 值对"串在一起时,JSON 就会体现出它的价值了。首先,可以创建包含多个"名称 / 值对"的 记录,比如:

从语法方面来看,这与"名称 / 值对"相比并没有很大的优势,但是在这种情况下 JSON 更容易使用,而且可读性更好。例如,它明确地表示以上三个值都是同一记录的一部分;花括号使这些值有了某种联系。

如果使用 JSON,就只需将多个带花括号的记录分组在一起:

这不难理解。在这个示例中,只有一个名为 people的变量,值是包含三个条目的数组,每个条目是一个人的记录,其中包含名、姓和电子邮件地址。上面的示例演示如何用括号将记录组合成一个值。当然,可以使用相同的语法表示多个值(每个值包含多个记录):

这里最值得注意的是,能够表示多个值,每个值进而包含多个值。但是还应该注意,在不同的主条目(programmers、authors 和 musicians)之间,记录中实际的名称 / 值对可以不一样。JSON 是完全动态的,允许在 JSON 结构的中间改变表示数据的方式。JavaScript 中使用它就很简单了。JSON 是 JavaScript 原生格式,这意味着在 JavaScript 中处理 JSON 数据不需要任何特殊的 API 或工具包。

var people = { "programmers": [ { "firstName": "Brett", "lastName":"McLaughlin", "email": "aaaa" },{ "firstName": "Jason", "lastName":"Hunter", "email": "bbbb" },{ "firstName": "Elliotte", "lastName":"Harold", "email": "cccc" }],"authors": [{ "firstName": "Isaac", "lastName": "Asimov", "genre": "science fiction" },{ "firstName": "Tad", "lastName": "Williams", "genre": "fantasy" },{ "firstName": "Frank", "lastName": "Peretti", "genre": "christian fiction" }],"musicians": [{ "firstName": "Eric", "lastName": "Clapton", "instrument": "guitar" },{ "firstName": "Sergei", "lastName": "Rachmaninoff", "instrument": "piano" }] }代码:

注意,数组索引是从零开始的。所以,这行代码首先访问 people变量中的数据;然后移动到称为 programmers的条目,再移动到第一个记录([0]);最后,访问 lastName键的值。结果是字符串值 “McLaughlin”。

利用这样的语法,可以处理任何 JSON 格式的数据,而不需要使用任何额外的 JavaScript 工具包或 API。

在将字符串转换为 JavaScript 对象之后,就可以像这样修改变量中的数据。

String newJSONtext = people.toJSONString();

更重要的是,可以将 任何JavaScript 对象转换为 JSON 文本。并非只能处理原来用 JSON 字符串赋值的变量。为了对名为 myObject的对象进行转换,只需执行相同形式的命令:

最终结论是,如果要处理大量 JavaScript 对象,那么 JSON 几乎肯定是一个好选择,这样就可以轻松地将数据转换为可以在请求中发送给服务器端程序的格式。  2、数组是值(value)的有序集合。一个数组以“[”(左中括号)开始,“]”(右中括号)结束。值之间使用“,”(逗号)分隔。  3、值(value)可以是双引号括起来的字符串(string)、数值(number)、true、false、 null、对象(object)或者数组(array)。这些结构可以嵌套。 4、字符串(string)是由双引号包围的任意数量Unicode字符的集合,使用反斜线转义。一个字符(character)即一个单独的字符串(character string)。 字符串(string)与C或者Java的字符串非常相似。  5、数值(number)也与C或者Java的数值非常相似。除去未曾使用的八进制与十六进制格式。除去一些编码细节。

不过eval解析json有安全隐患!

如果担心parse()对对象抛异常,可以加一个封装函数:

 

在数据传输流程中,json是以文本,即字符串的形式传递的,而JS操作的是JSON对象,所以,JSON对象和JSON字符串之间的相互转换是关键。例如:

JSON对象:
var str2 = { "name": "cxh", "sex": "man" };
一、JSON字符串转换为JSON对象

或者

或者

然后,就可以这样读取:

Alert(obj.sex);

二、可以运用 toJSONString()或者全局要领 JSON.stringify()将JSON对象转化为JSON字符串。

或者

alert(last);js自带的之外,其他的多个要领都来自json.js包。新版本的 JSON 修改了 API,将 JSON.stringify() 和 JSON.parse() 两个要领都注入到了 Javascript 的内建对象里面,前者变成了 Object.toJSONString(),而后者变成了 String.parseJSON()。如果提示找不到toJSONString()和parseJSON()要领,则说明您的json包版本太低。

//JSON对象 JSONObject的使用String str1 = "{ 'name': 'cxh', 'sex': '1' }";JSONObject obj = JSONObject.fromObject(str1);String name = obj.getString("name"); //直接返回字符串型 cxhObject nameo = obj.get("name"); //直接返回对象型的cxhint age = obj.getInt("sex"); //直接返回int型的sex//JSON数组对象 JSONArray的运用String jsonArrStr = "[{ 'name': 'cxh', 'sex': '1','website':'http://bejson.fuliqu.com' },{ 'name': '三少', 'sex': '1','website':'http://www.ij2ee.com' }]";        JSONArray array = JSONArray.fromObject(jsonArrStr);	int size = array.size(); //获取JSON数组大小	JSONObject jo = array.getJSONObject(0);//取第一个JSON对象	for(int i=0;i<size;i++){	JSONObject jo1 = array.getJSONObject(i);	System.out.println(jo1.getString("website")); //循环返回网址	}	//序列化Bean对象为JSON对象	User user = new User();	user.setName("cxh");	user.setSex(1);	user.setWebsite("http://bejson.fuliqu.com");	JSONObject jo2 =  JSONObject.fromObject(user);	System.out.println(jo2.toString()); //则会输出 { 'name': 'cxh', 'sex': '1','website':'http://bejson.fuliqu.com' }

结果为

再看一个对象转换的例子:

结果为

由于json只接受utf-8编码的字符,所以json_encode()的参数必须是utf-8编码,否则会得到空字符或者null。当中文使用GB2312编码,或者外文使用ISO-8859-1编码的时候,这一点要特别注意。

由于javascript不支持关联数组,所以json_encode()只将索引数组(indexed array)转为数组格式,而将关联数组(associative array)转为对象格式。

结果为:

结果就变了:

或者

三、类(class)的转换

现在,对这个类的实例进行json转换:

结果就是生成一个PHP对象:

如果想要强制生成PHP关联数组,json_decode()需要加一个参数true:

结果就生成了一个关联数组:

五、json_decode()的常见错误

对这三个字符串执行json_decode()都将返回null,并且报错。

另外,json只能用来表示对象(object)和数组(array),如果对一个字符串或数值使用json_decode(),将会返回null。


精彩广告