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)

  JSONXML不一样,因为:

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的东西。有趣的世界。

  (边注2Jason  Ajax 都是希腊神话中的英雄。预告:另外一些即将出现的技术垃圾包括:Heracles, Perseus, Deucalion, Theseus
and Bellerophon
)

JSON的格式

键值对的集合 {k:v}

值得有序列表 [1,2]

什么是JSON-java

JSON官网提供的java语言处理json数据的小框架。

阅读该源码的目的

1、学习解析类工具的原理

2、锻炼读代码的能力

解析JSON的原理

1JSON-java最重要的类有三个。

JSONObject : 包装一个map用来表示一个{k:v,k2:v2,k3:[1,2]}形式的json数据

JSONArray :包装一个ArrayList。用来表示一个[1,2,{k:v}]形式的json数据

JSONTokener:包装一个Reader。用来存储、读取、操作一个表示JSON数据的字符串

2、原理

1JSONObjectJSONArray都可以用一个JSONTokener作为构造参数去实例化。

2、解析时可能会产生多个JSONObject或者JSONArray。但是他们都是操作同一个JSONTokener

3JSONObjectJSONArray可以分别通过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")); 
   }
  }
    }

原创粉丝点击