2019独角兽企业重金招聘Python工程师标准>>>

Json设计的目的

21世纪初,Douglas Crockford寻找一种简便的数据交换格式,能够在服务器之间交换数据。当时通用的数据交换语言是XML,但是Douglas Crockford觉得XML的生成和解析都太麻烦,所以他提出了一种简化格式,也就是Json。(作者:参考2)

Json介绍

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

四条规则,就是Json格式的所有内容(作者:参考2):

  • 并列的数据之间用逗号(",")分隔。

  • 映射用冒号(":")表示。

  • 并列数据的集合(数组)用方括号("[]")表示。

  • 映射的集合(对象)用大括号("{}")表示。

假如有一段 XML:

<id>1</id>

<name>张三</name>

<age>25</age>

用 json 可以表示为:

{"id":1,"name":"张三","age":25}

Json应用

  • javascript

由于json是基于javascript的一个子集,所以在javascript下使用json就要相对容易些。接下来,我们看些例子:

1 var myFirstJSON = { "firstName" : "John",2                     "lastName"  : "Doe",3                     "age"       : 23 };4 5 document.writeln(myFirstJSON.firstName);  // Outputs John6 document.writeln(myFirstJSON.lastName);   // Outputs Doe7 document.writeln(myFirstJSON.age);        // Outputs 23

我们创建了一个名为myFirstJSON对象里面有三个属性firstName,lastName,age。接下来调用myFirstJSON对象的三个属性来打印出value值,是不是很简单?

当然有些人就会质疑说,这个不就是javascript中的对象和属性嘛,哪来什么json,其实json就是一个数据结构。基本上遵循json介绍中提供的4条原则那么它就是一个json格式。

好了我们再来说说原生json格式解析的例子(作者:参考3):

 1 // The following block implements the string.parseJSON method 2 (function (s) { 3   // This prototype has been released into the Public Domain, 2007-03-20 4   // Original Authorship: Douglas Crockford 5   // Originating Website: http://www.JSON.org 6   // Originating URL    : http://www.JSON.org/JSON.js 7  8   // Augment String.prototype. We do this in an immediate anonymous function to 9   // avoid defining global variables.10 11   // m is a table of character substitutions.12 13   var m = {14     '\b': '\\b',15     '\t': '\\t',16     '\n': '\\n',17     '\f': '\\f',18     '\r': '\\r',19     '"' : '\\"',20     '\\': '\\\\'21   };22 23   s.parseJSON = function (filter) {24 25     // Parsing happens in three stages. In the first stage, we run the text against26     // a regular expression which looks for non-JSON characters. We are especially27     // concerned with '()' and 'new' because they can cause invocation, and '='28     // because it can cause mutation. But just to be safe, we will reject all29     // unexpected characters.30 31     try {32       if (/^("(\\.|[^"\\\n\r])*?"|[,:{}\[\]0-9.\-+Eaeflnr-u \n\r\t])+?$/.33         test(this)) {34 35           // In the second stage we use the eval function to compile the text into a36           // JavaScript structure. The '{' operator is subject to a syntactic ambiguity37           // in JavaScript: it can begin a block or an object literal. We wrap the text38           // in parens to eliminate the ambiguity.39 40           var j = eval('(' + this + ')');41 42           // In the optional third stage, we recursively walk the new structure, passing43           // each name/value pair to a filter function for possible transformation.44 45           if (typeof filter === 'function') {46 47             function walk(k, v) {48               if (v && typeof v === 'object') {49                 for (var i in v) {50                   if (v.hasOwnProperty(i)) {51                     v[i] = walk(i, v[i]);52                   }53                 }54               }55               return filter(k, v);56             }57 58             j = walk('', j);59           }60           return j;61         }62       } catch (e) {63 64       // Fall through if the regexp test fails.65 66       }67       throw new SyntaxError("parseJSON");68     };69   }70 ) (String.prototype);71 // End public domain parseJSON block72 73 // begin sample code (still public domain tho)74 JSONData = '{"color" : "green"}';   // Example of what is received from the server.75 testObject=JSONData.parseJSON();
76 document.writeln(testObject.color); // Outputs: Green.

在上面这段代码中我们在String原型中添加了一个parseJSON()方法,有一个filter过滤函数,但是是可选项。

友情提示给初学者:

1 (function(s){
2     s.parseJSON  = function(){3        alert(this+'----parseJSON');4     };5 })(String.prototype);6 var a='abc';7 a.parseJSON();

这段代码意思是添加了一个自执行的函数,把String对象的原型传递给了形参s,并在String原型中添加parseJSON方法,打印出来 this+’----pareseJSON’ 其中this是调用这个parseJSON()方法的String字符串。

作者对于javascript对json格式的序列化和反序列化用的比较多的是json-sans-eval。请看参考4(无语执行eval的json解析)

提供一段google-code里的示例代码:

1 var myJson = '{ "x": "Hello, World!", "y": [1, 2, 3] }';2 var myJsonObj = jsonParse(myJson);3 alert(myJsonObj.x);  // alerts Hello, World!4 for (var k in myJsonObj) {5   // alerts x=Hello, World!  and  y=1,2,36   alert(k + '=' + myJsonObj[k]);7 }

使用非常简单,你只需要把json-sans-eval下载下来后在html里引进<script src=”yourpath/json-minified.js”></script>

然后接下来就可以使用jsonParse(jsonString)方法来解析json格式了。需要了解源码和详细用法的都可以去访问参考4里的网站。

  • java

在java中序列化和反序列化json格式的jar包还是比较多的。比如:json-lib,jackson,fastjson,json-tools等等。

以前用到的比较多的是json-lib,但是其解析性能不如jackson。其中就有一网友做了测试,不过非正式的测试,仅供参考。请访问参考5网站。

对于json-lib的解析(参考了网上一段代码):

 1 import java.util.ArrayList; 2 import java.util.HashMap; 3 import java.util.List; 4 import java.util.Map; 5  6 import net.sf.json.JSONArray; 7 import net.sf.json.JSONObject; 8  9 public class JSONTest {10     public static void main(String[] args) {
11         JSONTest j = new JSONTest();
12         j.ObjectList2json();
13     }
14    15     public void ObjectList2json(){16         Map map = new HashMap();17         18         List jlist = new ArrayList();19         JSONTestBean bean1 = new JSONTestBean("zhangbo","123123");20         JSONTestBean bean2 = new JSONTestBean("lisi","65489");21         Props props = new Props("127.0.0.1","8008");22         23         jlist.add(bean1);24         jlist.add(bean2);25         26         map.put("Props", props);27         map.put("jsonObjectList", jlist);28         29         JSONArray jsonArray = JSONArray.fromObject(map);
30         System.out.println(jsonArray);
31     }32     33     public void arr2json() {
34         boolean[] boolArray = new boolean[] { true, false, true };
35         JSONArray jsonArray = JSONArray.fromObject(boolArray);
36         System.out.println(jsonArray);
37         // prints [true,false,true]   38     }
39    40     public void list2json() {
41         List list = new ArrayList();
42         list.add("first");
43         list.add("second");
44         JSONArray jsonArray = JSONArray.fromObject(list);
45         System.out.println(jsonArray);
46         // prints ["first","second"]   47     }
48    49     public void createJson() {
50         JSONArray jsonArray = JSONArray.fromObject("['json','is','easy']");
51         System.out.println(jsonArray);
52         // prints ["json","is","easy"]   53     }
54    55     public void map2json() {
56         Map map = new HashMap();57         map.put("name", "json");
58         map.put("bool", Boolean.TRUE);
59         map.put("int", new Integer(1));
60         map.put("arr", new String[] { "a", "b" });
61         map.put("func", "function(i){ return this.arr[i]; }");
62    63         JSONObject json = JSONObject.fromObject(map);
64         System.out.println(json);
65         // prints
66         // ["name":"json","bool":true,"int":1,"arr":["a","b"],"func":function(i){
67         // return this.arr[i]; }]   68     }
69    70     public void bean2json() {
71         JSONObject jsonObject = JSONObject.fromObject(new JSONTestBean("zhangbo","234234"));
72         System.out.println(jsonObject);
73         /*  74          * prints
75          * {"func1":function(i){ return this.options[i];
76          * },"pojoId":1,"name":"json","func2":function(i){ return
77          * this.options[i]; }}
78          */   79     }
80    81     public void json2bean() {
82         String json = "{name=/"json2/",func1:true,pojoId:1,func2:function(a){ return a; },options:['1','2']}";
83 //        JSONObject jb = JSONObject.fromString(json);
84 //        JSONObject.toBean(jb, MyBean.class);   85         System.out.println();
86     }
87 }

javabean:

 1 public class JSONTestBean { 2  3     private String userName; 4  5     private String password; 6  7     public JSONTestBean() { 8  9     }10 11     public JSONTestBean(String username, String password) {12         this.userName = username;13         this.password = password;14     }15 16     public String getPassword() {17         return password;18     }19 20     public void setPassword(String password) {21         this.password = password;22     }23 24     public String getUserName() {25         return userName;26     }27 28     public void setUserName(String userName) {29         this.userName = userName;30     }31 }32 33 //===================================================34 public class Props {35     private String ip;36     private String port;37 38     public Props() {39     }40 41     public Props(String ip, String port) {42         this.ip = ip;43         this.port = port;44     }45 46     public String getIp() {47         return ip;48     }49 50     public void setIp(String ip) {51         this.ip = ip;52     }53 54     public String getPort() {55         return port;56     }57 58     public void setPort(String port) {59         this.port = port;60     }61 62 }

对于jackson的解析(参考了网上一段代码):

 1 /** 2  * 使用Jackson生成json格式字符串 3  * 4  * @author archie2010 since 2011-4-26下午05:59:46 5  */ 6 public class JacksonTest { 7  8     private static JsonGenerator jsonGenerator = null; 9     private static ObjectMapper objectMapper = null;10     private static User user = null;11 12     /**13      * 转化实体为json字符串14      * @throws IOException15      */16     public static void writeEntity2Json() throws IOException{17         System.out.println("使用JsonGenerator转化实体为json串-------------");18         //writeObject可以转换java对象,eg:JavaBean/Map/List/Array等19         jsonGenerator.writeObject(user);20         System.out.println();21         System.out.println("使用ObjectMapper-----------");22         //writeValue具有和writeObject相同的功能23         objectMapper.writeValue(System.out, user);24     }25     /**26      * 转化Map为json字符串27      * @throws JsonGenerationException28      * @throws JsonMappingException29      * @throws IOException30      */31     public static void writeMap2Json() throws JsonGenerationException, JsonMappingException, IOException{32         System.out.println("转化Map为字符串--------");33         Map<String, Object> map=new HashMap<String, Object>();34         map.put("uname", user.getUname());35         map.put("upwd", user.getUpwd());36         map.put("USER", user);37         objectMapper.writeValue(System.out, map);38     }39     /**40      * 转化List为json字符串41      * @throws IOException
42      * @throws JsonMappingException
43      * @throws JsonGenerationException
44      */45     public static void writeList2Json() throws IOException{46         List<User> userList=new ArrayList<User>();47         userList.add(user);48         49         User u=new User();50         u.setUid(10);51         u.setUname("archie");52         u.setUpwd("123");53         userList.add(u);54         objectMapper.writeValue(System.out, userList);55         56          57         58         objectMapper.writeValue(System.out, userList);59     }60     public static void main(String[] args) {61         user = new User();62         user.setUid(5);63         user.setUname("tom");64         user.setUpwd("123");65         user.setNumber(3.44);66         objectMapper = new ObjectMapper();67         try {68             jsonGenerator = objectMapper.getJsonFactory().createJsonGenerator(System.out, JsonEncoding.UTF8);69             //writeEntity2Json();70             //writeMap2Json();71             writeList2Json();72         } catch (IOException e) {73 74             e.printStackTrace();75 76         }77     }78 }

输出结果:

[{"number":3.44,"uname":"tom","upwd":"123","uid":5},{"number":0.0,"uname":"archie","upwd":"123","uid":10}]

还有fastjson的解析,这里就给个链接(http://www.oschina.net/code/snippet_12_3494),就不再罗嗦了。

  • delphi

这个慢慢被计算机潮流退出舞台的语言。由于最近公司需要,还有写些delphi代码,delphi对于json支持也不是非常的友好。不过还是给点参考代码:

用了json首页中推荐的JSON delphi Library

 1 var  2   js,xs:TlkJSONobject; 3   ws: TlkJSONstring; 4   s: String; 5   i: Integer; 6   b: TStringStream; 7 begin  8   b := TStringStream.Create(); 9   b.LoadFromFile('a.txt');
10   s := b.DataString;
11 12   js := TlkJSON.ParseText(s) as TlkJSONobject;
13   Memo1.Lines.Add('parent self-type name: ' + js.SelfTypeName);
14   Memo1.Lines.Add(IntToStr(TlkJSONlist(js.Field['metaData'].Field['fields']).count));
15   Memo1.Lines.Add(TlkJSONlist(js.Field['metaData'].Field['fields']).Child[1].field['name'].Value);

随便提一下YAML格式 官网是:http://yaml.org/

简单的一个YAML格式:

 1 --- !clarkevans.com/^invoice 2 invoice: 34843 3 date   : 2001-01-23 4 bill-to: &id001 5     given  : Chris 6     family : Dumars 7     address: 8         lines: | 9             458 Walkman Dr.10             Suite #29211         city    : Royal Oak12         state   : MI13         postal  : 4804614 ship-to: *id00115 product:16     - sku         : BL394D17       quantity    : 418       description : Basketball19       price       : 450.0020     - sku         : BL4438H21       quantity    : 122       description : Super Hoop23       price       : 2392.0024 tax  : 251.4225 total: 4443.5226 comments: >27     Late afternoon is best.28     Backup contact is Nancy29     Billsmer @ 338-4338.

好了,我饿了,也写的累了,该去吃晚饭了。写博客的博龄很短,有什么不足之处还请观看的各位海涵。

转载于:https://my.oschina.net/u/566587/blog/322989

Json入门及基本应用相关推荐

  1. JSON入门基础知识

    2019独角兽企业重金招聘Python工程师标准>>> JSON入门基础 1.JSON定义 JSON:JavaScript 对象表示法(JavaScript Object Notat ...

  2. 【JSON】JSON入门详解(二)

    文章目录 JSON基础文章荐读 JavaScript创建JSON对象 JSON与XML的那些事 JSON与XML的相同之处 JSON与XML的不同之处 AJAX相关JSON与XML JSON与XML的 ...

  3. 视频教程-JSON入门基础视频课程-Java

    JSON入门基础视频课程 Java讲师,多年培训经验,曾参与开发过的项目:某省电信ODS系统.电信自助取数系统.CRM客户关系管理系统.环境应急信息系统.自来水客服系统等.熟练掌握J2EE平台开发技能 ...

  4. package.json mysql_package.json入门

    package.json中添加中文注释会编译出错 npm install命令根据这个配置文件,自动下载所需的模块,也就是配置项目所需的运行和开发环境. package.json可以手工编写,也可以使用 ...

  5. JSON入门之二:org.json的基本用法

    java中用于解释json的主流工具有org.json.json-lib与gson,本文介绍org.json的应用. 官方文档: http://www.json.org/java/ http://de ...

  6. JSON——入门语法、对象、数组

    JSON是什么 JSON: JavaScript Object Notation(JavaScript 对象表示法) JSON是存储和交换文本信息的语法.类似 XML. JSON 比 XML 更小.更 ...

  7. json入门 PHP,PHP开发基础教程之JSON

    一.环境配置 在 php5.2.0 及以上版本已经内置 JSON 扩展. 二.JSON 函数 三.json_encode PHP json_encode() 用于对变量进行 JSON 编码,该函数如果 ...

  8. [json]Json 入门

    1.作用:数据交换格式 2.常见数据交换格式: 标量:北京: 序列:也叫array.list,例如"北京,上海" 映射:也叫键值对.散列/哈希,例如  "首都:北京&qu ...

  9. package.json 入门

    PACKAGE.JSON 参考链接:blog.csdn.net/u011240877/- 1. package.json npm在package.json文件中管理项目的依赖项以及项目的元数据. no ...

最新文章

  1. 如何使用netwokx进行复杂网络的中心性分析?
  2. 数据库sql linux,linux安装mysql数据库
  3. C# WPF MVVM开发框架Caliburn.Micro 关于Conventions⑧
  4. (18)System Verilog运算精度补齐示例
  5. JavaScript数据结构——树(Tree)
  6. 任正非:华为鸿蒙将比安卓快 60%;小米回应主题侵权;VS Code 1.36发布​ | 极客头条...
  7. mysql 恢复root权限_Linux MySQL root权限恢复[图文]
  8. java while循环_Java while循环
  9. ES6、7学习笔记(尚硅谷)-8-三点运算符
  10. python语言是编程还是脚本_编程语言和脚本语言有什么区别?
  11. 135编辑器的html,135编辑器
  12. 软件开发系统分析规格说明
  13. PHP生成二维码方法
  14. 速达服务器应用程序错误,速达软件错误集锦及解决方法
  15. 【Arcgis】球面坐标系转投影坐标
  16. 测试人员的绩效考核,看看你有哪些没做好
  17. 尚硅谷javaWeb书城项目第一阶段 用js实现
  18. Python之You-Get库学习
  19. Unity 之 Mac包运行本地日志位置
  20. 【2022年9月】237条微信内置浏览器UA

热门文章

  1. Django中配置自定义日志系统
  2. 基于免费人脸识别的闸机开发及源码分享
  3. 原价买了二手机,我是如何做到的?
  4. zoj 2760 How Many Shortest Path 最大流
  5. sharepoint 2013 自定义列表eventhandle权限控制
  6. 音视频解决方案之二次开发
  7. OpenCV Mat 简介
  8. 楼燚(yì)航的blog URL
  9. Java并发工具类(闭锁CountDownLatch)
  10. Node.js- sublime搭建node的编译环境