What is JSON:初识JSON <转>

简介:

本篇介绍JSON的基础知识。在没有接触AJAX之前我还不知道什么是JSON,在读Jeffrey Zhao的《深入Atlas系列》时才看到这个词,所以有必要了解一下JSON。这里我结合今天初浅的认识及一个小练习记录我的学习。

JSON是什么?

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。它基于JavaScript(Standard ECMA-262 3rd Edition - December 1999)的一个子集。 JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C, C++, C#, Java, JavaScript, Perl, Python等)。这些特性使JSON成为理想的数据交换语言。

JSON建构于两种结构:

  1. “名称/值”对的集合(A collection of name/value pairs)。不同的语言中,它被理解为对象(object)纪录(record)结构(struct)字典(dictionary)哈希表(hash table)有键列表(keyed list),或者关联数组 (associative array)
  2. 值的有序列表(An ordered list of values)。在大部分语言中,它被理解为数组(array)

这些都是常见的数据结构。事实上大部分现代计算机语言都以某种形式支持它们。这使得一种数据格式在同样基于这些结构的编程语言之间交换成为可能。

有关JSON的更多介绍,访问它的官方网站:http://www.json.org

在JavaScript中使用JSON

JSON是JavaScript对象描述符号(object literal notation)的一个子集。正因为JSON是JavaScript的子集,所以在JavaScript中我们可以很容易的使用它。

var myJSONObject = {"bindings": [
{"ircEvent": "PRIVMSG", "method": "newURI", "regex": "^http://.*"},
{"ircEvent": "PRIVMSG", "method": "deleteURI", "regex": "^delete.*"},
{"ircEvent": "PRIVMSG", "method": "randomURI", "regex": "^random.*"}
]
};

这个例子中,创建了一个对象,它只包含一个成员“bindings”。“bindings”是一个包含了3个对象的数组,而这每个对象都有"ircEvent""method""regex"3个成员。

这些成员可以用“.”或subscript 操作得到。

myJSONObject.bindings[0].method    // "newURI"

我们可以使用eval()函数的eval()方法调用JavaScript的编译器把JSON文本转变成对象。因为JSON是JavaScript的一个确切的子集,编译器可以正确地解析JSON文本,然后生成一个对象结构。

var myObject = eval('(' + myJSONtext + ')');

eval函数的执行效率很高。然而,它能够编译、执行任何的JS程序,所以这样会有安全问题。在来源可信的时候才需要使用eval,这通常是服务器提供基础页面和JSON数据的web应用程序中的情形。而很多情况中,来源是不可信的。特别是永远都不要信任客户端。

如果关心安全的话,那最好是使用JSON解析器了(js脚本中有解析功能的函数)。JSON解析器只认可JSON文本,因此它比较安全:

var myObject = myJSONtext.parseJSON();

而JSON的字符串转换器(stringifier)则作相反的工作,它将JavaScript数据结构转换为JSON文本。JSON是不支持循环数据结构的,所以注意不能把循环的结构交给字符串转换器。

var myJSONText = myObject.toJSONString();

这里是JSON官方网站提供的一个开源的JSON解析器和字符串转换器:json.js

 一个使用json.js的简单例子

  1. 在VS中新建一个空网站。
  2. 引入json.js文件。
    • < script type = " text/javascript "  src = " json.js " ></ script >
  3. 然后添加一个HTML页面,在页面上拖放两个Textarea和三个Button;Button的ID分别为btnParser、btnEval和btnStringifier;Textarea的ID分别为txtJSON和txtJS,cols设为50,rows设为10;
  4. 编写三个Button的事件代码。
    •      < script type = " text/javascript " >
          
      // <![CDATA[
          
              
      function  btnStringifier_Click()  {
                  
      var oTxtJSON = document.getElementById("txtJSON");           
                  
      var myObject = new Object(); //创建对象
                  var obindings = new Array();
                  
      var oFirst = new Object();
                  
      var oSecond = new Object();
                  
      var oThird = new Object();
                  
                  oFirst.ircEvent 
      = "PRIVMSG";
                  oFirst.method 
      = "newURI";
                  oFirst.regex 
      = "^http://.*";   
                  
      //
                  
                  obindings[
      0= oFirst;
                  obindings[
      1= oSecond;
                  obindings[
      2= oThird;
                  
                  
      //将obindings数组设置为myObject的bindings成员
                  myObject.bindings = obindings;
                  
                  
      //将对象转化成JSON文本,并把文本写入Textarea中
                  oTxtJSON.value = myObject.toJSONString(); 
              }
       
          
              
      function  btnParser_Click()  {
                  
      var oTxtJSON = document.getElementById("txtJSON");
                  
      var oTxtJS = document.getElementById("txtJS");
                  
      //把JSON文本转变成对象 
                  var myObject = oTxtJSON.value.parseJSON();
                  
                  
      //获取myObject对象的第一个bindings成员得ircEvent成员(属性值)
                  oTxtJS.value += myObject.bindings[0].ircEvent + "/";
              }
       

              
      function  btnEval_Click() 
                  
      var oTxtJSON = document.getElementById("txtJSON");
                  
      var oTxtJS = document.getElementById("txtJS");
                  
      //把JSON文本转变成对象 
                  var myObject = eval('(' + oTxtJSON.value + ')');
                  
                  
      //获取myObject对象的第一个bindings成员得ircEvent成员(属性值)
                  oTxtJS.value += myObject.bindings[0].method + "/";
              }


          
      // ]]> 
           </ script >
  5. 运行HTML页面,先点Stringifier,得到对象的JSON文本;然后点Parser,将JSON文本转化成对象,然后获取ircEvent成员的值;最后点Eval,它也将JSON文本转化成对象,然后获取method成员的值;看看效果:

原文地址:http://www.cnblogs.com/hunts/archive/2006/11/15/561710.aspx

 

 

本文转自温景良(Jason)博客园博客,原文链接:http://www.cnblogs.com/wenjl520/archive/2009/08/10/1542775.html,如需转载请自行联系原作者

相关文章
|
XML JSON JavaScript
JSON 初识 #yyds干货盘点#
JSON 初识 #yyds干货盘点#
145 0
JSON 初识 #yyds干货盘点#
|
XML 存储 JSON
JSON学习笔记(一、初识)
JSON学习笔记(一、初识)
148 0
|
XML JSON JavaScript
|
3月前
|
XML 存储 JSON
Twaver-HTML5基础学习(19)数据容器(2)_数据序列化_XML、Json
本文介绍了Twaver HTML5中的数据序列化,包括XML和JSON格式的序列化与反序列化方法。文章通过示例代码展示了如何将DataBox中的数据序列化为XML和JSON字符串,以及如何从这些字符串中反序列化数据,重建DataBox中的对象。此外,还提到了用户自定义属性的序列化注册方法。
51 1
|
2月前
|
数据采集 JSON 数据处理
抓取和分析JSON数据:使用Python构建数据处理管道
在大数据时代,电商网站如亚马逊、京东等成为数据采集的重要来源。本文介绍如何使用Python结合代理IP、多线程等技术,高效、隐秘地抓取并处理电商网站的JSON数据。通过爬虫代理服务,模拟真实用户行为,提升抓取效率和稳定性。示例代码展示了如何抓取亚马逊商品信息并进行解析。
抓取和分析JSON数据:使用Python构建数据处理管道
|
1月前
|
JSON 数据格式 索引
Python中序列化/反序列化JSON格式的数据
【11月更文挑战第4天】本文介绍了 Python 中使用 `json` 模块进行序列化和反序列化的操作。序列化是指将 Python 对象(如字典、列表)转换为 JSON 字符串,主要使用 `json.dumps` 方法。示例包括基本的字典和列表序列化,以及自定义类的序列化。反序列化则是将 JSON 字符串转换回 Python 对象,使用 `json.loads` 方法。文中还提供了具体的代码示例,展示了如何处理不同类型的 Python 对象。
|
1月前
|
JSON 缓存 前端开发
PHP如何高效地处理JSON数据:从编码到解码
在现代Web开发中,JSON已成为数据交换的标准格式。本文探讨了PHP如何高效处理JSON数据,包括编码和解码的过程。通过简化数据结构、使用优化选项、缓存机制及合理设置解码参数等方法,可以显著提升JSON处理的性能,确保系统快速稳定运行。
|
2月前
|
JSON JavaScript Java
在Java中处理JSON数据:Jackson与Gson库比较
本文介绍了JSON数据交换格式及其在Java中的应用,重点探讨了两个强大的JSON处理库——Jackson和Gson。文章详细讲解了Jackson库的核心功能,包括数据绑定、流式API和树模型,并通过示例演示了如何使用Jackson进行JSON解析和生成。最后,作者分享了一些实用的代码片段和使用技巧,帮助读者更好地理解和应用这些工具。
178 0
在Java中处理JSON数据:Jackson与Gson库比较
|
1月前
|
JSON API 数据安全/隐私保护
拍立淘按图搜索API接口返回数据的JSON格式示例
拍立淘按图搜索API接口允许用户通过上传图片来搜索相似的商品,该接口返回的通常是一个JSON格式的响应,其中包含了与上传图片相似的商品信息。以下是一个基于淘宝平台的拍立淘按图搜索API接口返回数据的JSON格式示例,同时提供对其关键字段的解释
|
2月前
|
JSON JavaScript API
(API接口系列)商品详情数据封装接口json数据格式分析
在成长的路上,我们都是同行者。这篇关于商品详情API接口的文章,希望能帮助到您。期待与您继续分享更多API接口的知识,请记得关注Anzexi58哦!

热门文章

最新文章