`

Json解析教程(一.org.json的使用)

    博客分类:
  • Json
阅读更多

现在越来越多的网站采用JSON来交换数据,在Json.org网站上,Java可以使用的解析Json的组件就有21种之多。这里以使用org.json解析JSON为例。在读本文之前,读者有必要了解一下JSON的结构,这里不作介绍。
首先下载org.json源码,下载地址:https://github.com/douglascrockford/JSON-java,点 Downloads,Windows系统就选zip吧。下载完后解压,在你的项目里新建一个名为 org.json的包,把除README和Test.java以外的所有文件放入该包内(Eclipse只要拖进去就可以),现在我们就可以用 org.json解析JSON.为了以后方便,你也可以把org.json这个包打成jar,在要用的项目上导入就行。

一、简介 

org.json是Java常用的Json解析工具,主要提供JSONObject和JSONArray类,现在就各个类的使用解释如下 

二、准备 

1.在使用org.json之前,我们应该先从该网址https://github.com/douglascrockford/JSON-java下载org.json源码,并将源码其加入到Eclipse中,即可调用 

2.查看相关的API文档,访问:https://github.com/douglascrockford/JSON-java。 

三、讲解 

1.JSONObject: 

  • 是一个无序的键/值对集合 

  • 它的表现形式是一个包裹在花括号的字符串,键和值之间使用冒号隔开,键值和键值之间使用逗号隔开 

  • 内在形式是一个使用get()和opt()方法通过键来访问值,和使用put()方法通过键来添加或者替代值的对象 

  • 值可以是任何这些类型:Boolean,JSONArray,JSONObject,Number和String,或者JOSONObject.NULL对象。 

代码演示如下 

1 public static void jsonObjectTest() {
2 JSONObject jsonobj = new JSONObject("{'name':'xiazdong','age':20}");
3     String name = jsonobj.getString("name");
4 int age = jsonobj.getInt("age");
5     System.out.println("name = " + name + ",age = " + age);
6 }

注:JSONObject有很多optXXX方法,比如optBooleanoptStringoptInt... 

他们的意思是,如果这个jsonObject有这个属性,则返回这个属性,否则返回一个默认值 

2.JSONArray: 

  • 是一个有序的序列值 

  • 它的表现形式是一个包裹在方括号的字符串,值和值之间使用逗号隔开 

  • 内在形式是一个使用get()和opt()方法通过索引来访问值,和使用put()方法来添加或修改值的对象 

  • 值可以是任何这些类型:Boolean,JSONArray,JSONObject,Number,和String,或者JSONObject.NULL对象。 

代码演示如下 

1 public static void jsonArrayTest() {
2 JSONArray jsonarray = new JSONArray("[{'name':'xiazdong','age':20},{'name':'xzdong','age':15}]");
3 for (int i = 0; i < jsonarray.length(); i++) {
4 JSONObject jsonobj = jsonarray.getJSONObject(i);
5         String name = jsonobj.getString("name");
6         int age = jsonobj.getInt("age");
7         System.out.println("name = " + name + ",age = " + age);
8     }
9 }

嵌套的JSONObject和JSONArray代码演示如下 

01 public static void jsonObjectAndArrayTest() {
02 String jsonstring = "{'name':'xiazdong','age':20,'book':['book1','book2']}";
03 JSONObject jsonobj = new JSONObject(jsonstring);
04   
05     String name = jsonobj.getString("name");
06 System.out.println("name" + ":" + name);
07   
08     int age = jsonobj.getInt("age");
09     System.out.println("age" + ":" + age);
10   
11 JSONArray jsonarray = jsonobj.getJSONArray("book");
12 for (int i = 0; i < jsonarray.length(); i++) {
13         String book = jsonarray.getString(i);
14 System.out.println("book" + i + ":" + book);
15     
16 } <span style="line-height:17px;background-color:transparent;font-family:Calibri, sans-serif;color:windowtext;font-size:11pt;"> </span>

3.JSONStringer: 

  • 是一个用于快速构造JSON文本的工具 

  • JSONWriter的子类 

  • bject():开始一个对象,即添加{;enObject():结束一个对象,即添加} 

  •  array():开始一个数组,即添加[; endArray():结束一个数组,即添加] 

  • key():表示添加一个key;value():表示添加一个value 

代码演示如下 

1 public static void jsonStringerTest() {
2 JSONStringer stringer = new JSONStringer();
3     stringer.object().key("name").value("xiazdong").key("age").value(20).endObject();
4 System.out.println(stringer);
5 } <span style="line-height:17px;background-color:transparent;font-family:Calibri, sans-serif;color:windowtext;font-size:11pt;"> </span>

负载的JSON格式写演示(PrintWriter+JSONStringer可以写入JSON文件): 

01 public static void jsonStringerTest2() throws FileNotFoundException {
02 JSONStringer jsonStringer = new JSONStringer();
03 JSONObject obj6 = new JSONObject();
04     obj6.put("title", "book1").put("price", "$11");
05 JSONObject obj3 = new JSONObject();
06     obj3.put("book", obj6);
07 obj3.put("author", new JSONObject().put("name", "author-1"));
08   
09 JSONObject obj5 = new JSONObject();
10     obj5.put("title", "book2").put("price", "$22");
11 JSONObject obj4 = new JSONObject();
12     obj4.put("book", obj5);
13  obj4.put("author", new JSONObject().put("name", "author-2"));
14   
15 JSONArray obj2 = new JSONArray();
16     obj2.put(obj3).put(obj4);
17   
18 JSONObject obj1 = new JSONObject();
19     obj1.put("title", "BOOK");
20     obj1.put("signing", obj2);
21   
22     jsonStringer.object().key("session").value(obj1).endObject();
23     System.out.println(jsonStringer.toString());
24   
25 PrintWriter out = new PrintWriter(new FileOutputStream("1.txt"));
26 out.println(jsonStringer.toString());
27     out.close();
28 } <span style="line-height:17px;background-color:transparent;font-family:Calibri, sans-serif;color:windowtext;font-size:11pt;"> </span>

4.JSONTokener 

  • 它和JSONObject和JSONArray的构造函数一起使用,用于解析JSON源字符串 

代码演示如下(JSONObject+JSONTokener能够获取JSON格式文本对象): 

1 public static void JSONTokenerTest() throws FileNotFoundException {
2     JSONObject jsonobj = new JSONObject(new JSONTokener(new FileReader(new File("1.txt"))));
3     System.out.println(jsonobj.getJSONObject("session").getJSONArray("signing").getJSONObject(1).getJSONObject("book").getString("title"));
4 }

注意:在Java中,JSON格式的字符串最好用单引号表示 

 

 

例子一:

 

String s = "{\"person\":{\"name\":\"张三\",\"age\":20}}";
JSONObject jsonObj = new JSONObject(s);
JSONObject  result = jsonObj.getJSONObject("person");
System.out.println("姓名:"+result.getString("name")+" 年龄:"+result.getInt("age"));
//解析object形式
s="{\"persons\":[\"张三\",\"李四\",\"王五\"]}";
jsonObj = new JSONObject(s);JSONArray;
jsonarr=jsonObj.getJSONArray("persons");
for(int i=0;i<jsonarr.length();i++)
{
   System.out.println(jsonarr.getString(i));
}//解析array形式

例子二:

 

//使用new JSONObject()构造一个JSON对象,参数为空
 public String jsonTest() throws JSONException{
        JSONObject json=new JSONObject();
        JSONArray jsonMembers = new JSONArray();
         
            JSONObject member1 = new JSONObject();
            member1.put("loginname", "jack");
            member1.put("password", "userpass");
            member1.put("email","fbeiwb@163.com");
            member1.put("sign_date", "2007-06-12");
            jsonMembers.put(member1);
             
            JSONObject member2 = new JSONObject();
            member2.put("loginname", "tom");
            member2.put("password", "userpass");
            member2.put("email","123123@126.com");
            member2.put("sign_date", "2008-07-16");
            jsonMembers.put(member2);
 
        json.put("users", jsonMembers);
                //以字符串形式返回JSON对象的内容
        return json.toString();
    }
     
//从字符串构造一个JSON对象并解析之
  public String jsonTest2() throws JSONException{
 String jsonString="{\"users\":[{\"loginname\":\"jack\",\"password\":\"userpass\",\"email\":\"fbeiwb@163.com\"},{\"loginname\":\"tom\",\"password\":\"userpass\",\"email\":\"1231231@163.com\"}]}";
        JSONObject json= new JSONObject(jsonString);
        JSONArray jsonArray=json.getJSONArray("users");
        String loginNames="loginname list:";
        for(int i=0;i<jsonArray.length();i++){
            JSONObject user=(JSONObject) jsonArray.get(i);
            String userName=(String) user.get("loginname");
            if(i==jsonArray.length()-1){
                loginNames+=userName;
            }else{
                loginNames+=userName+",";
            }
        }
        return loginNames;
    }
分享到:
评论

相关推荐

    JSONObject解析json,C# asp.net JSON解析 com.force.json

    接下来,我们将通过一个简单的示例来展示如何解析JSON。假设我们有以下JSON字符串: ```json { "name": "John Doe", "age": 30, "isStudent": false, "hobbies": ["阅读", "编程", "旅行"] } ``` 使用`...

    【Unity-插件】JsonNet.9.0.1.zip UnityJson解析插件

    描述中提到的“Unity用的Json解析工具”是指JsonNet插件是专为Unity开发设计的。在Unity中,我们可能需要将游戏对象的状态或用户数据保存为JSON格式,或者从服务器接收JSON数据来更新游戏状态。JsonNet提供了一套...

    JAVA解析json文件(使用json.org.jar)

    本文将详细讲解如何使用`json.org.jar`库在Android环境中解析JSON文件,帮助开发者理解这一过程。 首先,`json.org.jar`是由JSON.org提供的一个纯Java实现的JSON解析库,它提供了对JSON的创建、解析和序列化等功能...

    Json解析详细教程.pdf

    Json解析详细教程.pdf

    Java下的json解析工具包:org.json.jar包

    总的来说,`org.json.jar`库为Java开发者提供了一个简单易用的JSON处理工具,无论是在解析JSON字符串,还是在构建JSON对象,甚至是与其他格式(如XML、HTTP头、Cookies)之间的转换,都提供了极大的便利。...

    json2-min.js(亲测可用)

    1. **JSON解析**:通过`JSON.parse()`方法,可以将一个JSON格式的字符串转换为JavaScript对象。例如: ```javascript var jsonString = '{"name":"John", "age":30, "city":"New York"}'; var jsonObject = JSON....

    C#解析json的Newtonsoft.Json.dll各种.net版本

    在.NET开发领域,C#语言提供了多种方式来处理JSON数据,其中最受欢迎的库之一就是Newtonsoft.Json.dll。这个库由James Newton-King 开发,它为C#开发者提供了丰富的功能,便于序列化和反序列化JSON,使得JSON数据在...

    JSON解析demo.zip

    本示例"JSON解析demo.zip"提供的可能是一个使用自定义封装类快速解析JSON数据的实例,这对于简化代码和提高效率非常有用。 首先,我们来了解`org.json`库中的主要类: 1. **JSONObject**:代表一个JSON对象,它由...

    json3.js 【JS / JavaScript 中解析JSON的js包,JSON官方的JSON解析包】

    json3.js 【JS / JavaScript 中...JavaScript中解析JSON --- JSON.parse()、JSON.stringify()以及$.parseJSON()使用详解 - chunlynn的小屋 - CSDN博客 http://blog.csdn.net/chenchunlin526/article/details/78850924

    JSON net.sf.json jar包

    例如,你可以使用`JSONArray`、`JSONObject`等类进行JSON的创建、解析和操作。 总的来说,`net.sf.json`库是Java开发中处理JSON数据的一个强大工具,能够帮助开发者轻松地进行JSON数据的序列化和反序列化,提高了...

    阿里json解析包1.2.9.jar

    阿里JSON解析包1.2.9.jar是一款由阿里巴巴开发的高效、易用的Java JSON处理库,主要用于数据的序列化和反序列化操作。在Java编程中,JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,广泛应用于前后...

    易语言源码易语言水淼JSON解析模块源码.rar

    易语言源码易语言水淼JSON解析模块源码.rar 易语言源码易语言水淼JSON解析模块源码.rar 易语言源码易语言水淼JSON解析模块源码.rar 易语言源码易语言水淼JSON解析模块源码.rar 易语言源码易语言水淼JSON解析模块...

    JSON解析器YAJL.zip

    YAJL (Yet Another JSON Library) 是一个小型事件驱动(SAX风格)的 JSON 解析器,采用 ANSI C 编写。 标签:YAJL

    c#利用Newtonsoft.Json解析json(带数组)

    本教程将深入探讨如何使用Newtonsoft.Json库在C#中解析包含数组的JSON对象,这对于处理从Web API、数据库或其他服务获取的复杂数据至关重要。 首先,我们需要了解Newtonsoft.Json库,它也被称为Json.NET,是一个...

    易语言源码页面订单json解析易语言源码.rar

    易语言源码页面订单json解析易语言源码.rar 易语言源码页面订单json解析易语言源码.rar 易语言源码页面订单json解析易语言源码.rar 易语言源码页面订单json解析易语言源码.rar 易语言源码页面订单json解析易语言...

    org.json.jar工具包下载(可用)

    这个资源包`org.json.jar`正是这个库的实现,它包含了一系列的类和方法,使得在Java程序中处理JSON变得简单。 `org.json`库的核心类主要包括以下几个: 1. **JSONObject**: 这个类代表了一个JSON对象,可以存储...

    org.json.jar三个最新版本

    org.json.jar是Java平台上的一个库,它提供了一系列API,方便开发者处理JSON对象,包括序列化和反序列化Java对象为JSON格式,以及解析JSON文本。 在Java开发中,org.json.jar库是非常常用的工具,它包含了一些核心...

    org.json.jar包

    `org.json.jar` 包是Java开发中广泛使用的开源库,主要用于处理JSON(JavaScript Object Notation)数据。JSON是一种轻量级的数据交换格式,因其简洁、易于读写和解析的特性,被广泛应用在Web服务和应用程序之间进行...

    Unity能够在WebGL包使用的json解析.dll

    在Unity中,如果需要在WebGL平台上使用JSON解析功能,可能需要使用Unity内置的JsonUtility类,或者使用第三方的JSON库,如Newtonsoft.Json(又名Json.NET),因为System.Web.Extensions可能不直接适用于WebGL环境。...

    org.json的依赖包

    在实际开发中,使用org.json库可以非常便捷地处理JSON数据,例如从网络响应中解析JSON,将Java对象序列化为JSON,或者对JSON数据进行查询和修改。这个库简单易用,对于小型项目和快速原型开发尤其适用。在大型项目中...

Global site tag (gtag.js) - Google Analytics