JSON学习
来源:互联网 发布:关口知宏 零 编辑:程序博客网 时间:2024/06/05 09:26
JSON 这几个字母是什么意思?
JavaScript Object Notation.
[一个滑稽的名字。它应该被称作Lightweight Ecmascript Object Notation,或简称'LEON'。 ]
JSON是一种传递对象的语法,对象可以是name/value对,数组和其他对象。
下面是一小段JSON代码:
{"skillz": {"web":[ {"name": "html", "years": "5" }, {"name": "css", "years": "3" }],"database":[ {"name": "sql", "years": "7" }]}}
JSON主要部分:
花括弧,方括弧,冒号和逗号
1. 花括弧表示一个“容器”
2. 方括号装载数组
3. 名称和值用冒号隔开
4. 数组元素通过逗号隔开
JSON很像XML,因为:
1. 他们都“自我描述”,这意味着值都是可列举的,是“人类可读”的
2. 都是有层级的。(例如你可以在值里再存放值)
3. 都能被多种的编程语言解析和使用
4. 都能使用AJAX方法来传递(例如httpWebRequest)
JSON跟XML不一样,因为:
1. XML里在元素的开始和结尾处有尖括号和标签名:JSON使用花括号,而且只在数据的开始和结束时使用。
2. JSON更简练,毫无疑问更适合人类书写,也许也能让我们更快速的阅读。
3. JSON可以在JavaScript里简单的传递到eval()方法里使用
4. JSON里有数组{每个元素没有自己的名称}
5. 在XML里你可以对一个元素使用任意想要的名称,在JSON里你不能使用Javascript里的保留字
它有什么好的?
当你写ajax之类的东西时,如果你使用JSON,你就勉去了手工拼写XML。更迅速。
同样,当你写ajax之类的东西时,怎样最简单?XML方式还是JSON方式:
XML方式:
1. 取回一个XML文件
2. 循环它,从中提取值
3. 处理这些值,等
对比
JSON方式:
1. 取回JSON字符串。
2. ‘eval’ JSON数据
它是面向对象的吗?
No,严格的说,不是。
就像是VB6里的面向对象一样。它提供了很好的封装机制,你可以使用它把数据和方法分离出来,但它不提供任何的继承,多型,接口,或其它类似的面向对象的东西
很显然,它是使javascript变得更易于维护,分析和复用的方向上前进了一步。
Thomas Frank写了一个灵巧的javascript库,叫做classyJSON,它在JSON代码上增加了继承和定义范围等特征。
它只是用在客户端吗?
是,也不是。在服务器端你可以容易的把对象序列化成JSON或反之。对于.net,程序员可以使用类似Json.net的类库使这些操作自动化(我估计是使用反射机制),或你使用自己的程序来做这些事,可能会更快些。
JSON是由一个叫做Douglas Crockford的家伙发明的。
现在去读一下懂JSON的人写的东西
(从Delicious using JSON上搜刮来的!)
· DOM Query Speed Test
· 24 ways: Don’t be eval()
· Understanding JSON: the 3 minute lesson
· Serializing Objects as JavaScript using Atlas, JSON.NET and AjaxPro
· JSON – Wikipedia, the free encyclopedia
· Introduction to JSON
· XML.com: JSON and the Dynamic Script Tag: Easy, XML-less Web Services for JavaScript
· Classy JSON
· ajax json tutoral
· XML to JSON – a converter
(边注:如果你把{和}替换成”<”和“/>”,把”:”换成“/”…你会得到一个非常像gaXml的东西。有趣的世界。
(边注2:Jason 和 Ajax 都是希腊神话中的英雄。预告:另外一些即将出现的技术垃圾包括:Heracles, Perseus, Deucalion, Theseus
and Bellerophon。)
JSON的格式
键值对的集合 {k:v}
值得有序列表 [1,2]
什么是JSON-java
JSON官网提供的java语言处理json数据的小框架。
阅读该源码的目的
1、学习解析类工具的原理
2、锻炼读代码的能力
解析JSON的原理
1、JSON-java最重要的类有三个。
JSONObject : 包装一个map。用来表示一个{k:v,k2:v2,k3:[1,2]}形式的json数据
JSONArray :包装一个ArrayList。用来表示一个[1,2,{k:v}]形式的json数据
JSONTokener:包装一个Reader。用来存储、读取、操作一个表示JSON数据的字符串
2、原理
1、JSONObject和JSONArray都可以用一个JSONTokener作为构造参数去实例化。
2、解析时可能会产生多个JSONObject或者JSONArray。但是他们都是操作同一个JSONTokener。
3、JSONObject和JSONArray可以分别通过JSONTokener提供的方法解析出对方。可以实现嵌套。
例子
new JSONObject("{k:v,k2:v2,k3:[1,{k4:V4}]}");
实例:
/**
* 人民网国内动态新闻
* @param url_json
* @throws IOException
*/
public void parserRollnews(String url_json) throws IOException {
HttpURLConnection url=null;
String htmladdr=url_json;
try {
URL url1 = new URL(htmladdr);
url = (HttpURLConnection)url1.openConnection ();
url.setRequestProperty("User-Agent", "mozlla/5.0");
url.setRequestProperty("GB2312", "gzip, deflate");
url.connect();
} catch (Exception e) {
e.printStackTrace();
return ;
}
if(url!=null){
InputStream stream;
stream = url.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(stream,"UTF-8"));
String temp = null;
String temp2 = "";
try {
while ((temp = reader.readLine().replaceAll("\"","'").trim()) != null){
temp2 += temp;
}
} catch (RuntimeException e) {
//e.printStackTrace();
}
reader.close();
JSONObject jo = JSONObject.fromObject(temp2);
JSONArray js = jo.getJSONArray("items"); //category jo.getJSONObject(key)
for (int i=0 ; i < js.size(); i++) {
System.out.println(js.getJSONObject(i).get("id"));
System.out.println(js.getJSONObject(i).get("title"));
System.out.println(news.getNewsURL());
System.out.println(js.getJSONObject(i).get("date"));
System.out.println(js.getJSONObject(i).get("nodeId"));
System.out.println(js.getJSONObject(i).get("imgCount"));
}
}
}
- json学习-什么是json
- 【json】慕课网json学习
- JSON 学习
- JSON学习
- JSON学习
- JSON学习
- JSON学习
- JSON学习
- json 学习
- JSON学习
- JSON学习
- json学习
- json学习
- JSON学习
- json学习
- 学习JSON
- JSON学习
- json学习
- 第五次课后作业
- 第三次上机实验
- android 自定义正方形 绕中心点旋转
- dwr调用报Session Error错误
- OpenGL 中的纹理
- JSON学习
- C语言中.h和.c文件解析
- js中的attr()
- 黑马程序员_java_银行售票系统
- object-c 第一周周报
- java nio与tomcat 6 中nio的使用
- hdu Robberies 概率DP
- Java操作excel
- 2012年图灵奖