Json入门及基本应用
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入门及基本应用相关推荐
- JSON入门基础知识
2019独角兽企业重金招聘Python工程师标准>>> JSON入门基础 1.JSON定义 JSON:JavaScript 对象表示法(JavaScript Object Notat ...
- 【JSON】JSON入门详解(二)
文章目录 JSON基础文章荐读 JavaScript创建JSON对象 JSON与XML的那些事 JSON与XML的相同之处 JSON与XML的不同之处 AJAX相关JSON与XML JSON与XML的 ...
- 视频教程-JSON入门基础视频课程-Java
JSON入门基础视频课程 Java讲师,多年培训经验,曾参与开发过的项目:某省电信ODS系统.电信自助取数系统.CRM客户关系管理系统.环境应急信息系统.自来水客服系统等.熟练掌握J2EE平台开发技能 ...
- package.json mysql_package.json入门
package.json中添加中文注释会编译出错 npm install命令根据这个配置文件,自动下载所需的模块,也就是配置项目所需的运行和开发环境. package.json可以手工编写,也可以使用 ...
- JSON入门之二:org.json的基本用法
java中用于解释json的主流工具有org.json.json-lib与gson,本文介绍org.json的应用. 官方文档: http://www.json.org/java/ http://de ...
- JSON——入门语法、对象、数组
JSON是什么 JSON: JavaScript Object Notation(JavaScript 对象表示法) JSON是存储和交换文本信息的语法.类似 XML. JSON 比 XML 更小.更 ...
- json入门 PHP,PHP开发基础教程之JSON
一.环境配置 在 php5.2.0 及以上版本已经内置 JSON 扩展. 二.JSON 函数 三.json_encode PHP json_encode() 用于对变量进行 JSON 编码,该函数如果 ...
- [json]Json 入门
1.作用:数据交换格式 2.常见数据交换格式: 标量:北京: 序列:也叫array.list,例如"北京,上海" 映射:也叫键值对.散列/哈希,例如 "首都:北京&qu ...
- package.json 入门
PACKAGE.JSON 参考链接:blog.csdn.net/u011240877/- 1. package.json npm在package.json文件中管理项目的依赖项以及项目的元数据. no ...
最新文章
- 如何使用netwokx进行复杂网络的中心性分析?
- 数据库sql linux,linux安装mysql数据库
- C# WPF MVVM开发框架Caliburn.Micro 关于Conventions⑧
- (18)System Verilog运算精度补齐示例
- JavaScript数据结构——树(Tree)
- 任正非:华为鸿蒙将比安卓快 60%;小米回应主题侵权;VS Code 1.36发布​ | 极客头条...
- mysql 恢复root权限_Linux MySQL root权限恢复[图文]
- java while循环_Java while循环
- ES6、7学习笔记(尚硅谷)-8-三点运算符
- python语言是编程还是脚本_编程语言和脚本语言有什么区别?
- 135编辑器的html,135编辑器
- 软件开发系统分析规格说明
- PHP生成二维码方法
- 速达服务器应用程序错误,速达软件错误集锦及解决方法
- 【Arcgis】球面坐标系转投影坐标
- 测试人员的绩效考核,看看你有哪些没做好
- 尚硅谷javaWeb书城项目第一阶段 用js实现
- Python之You-Get库学习
- Unity 之 Mac包运行本地日志位置
- 【2022年9月】237条微信内置浏览器UA