现在越来越多的网站采用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方法,比如optBoolean, optString, optInt...
他们的意思是,如果这个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格式的字符串最好用单引号表示
例子一:
例子二:
//使用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;
}
相关推荐
接下来,我们将通过一个简单的示例来展示如何解析JSON。假设我们有以下JSON字符串: ```json { "name": "John Doe", "age": 30, "isStudent": false, "hobbies": ["阅读", "编程", "旅行"] } ``` 使用`...
描述中提到的“Unity用的Json解析工具”是指JsonNet插件是专为Unity开发设计的。在Unity中,我们可能需要将游戏对象的状态或用户数据保存为JSON格式,或者从服务器接收JSON数据来更新游戏状态。JsonNet提供了一套...
本文将详细讲解如何使用`json.org.jar`库在Android环境中解析JSON文件,帮助开发者理解这一过程。 首先,`json.org.jar`是由JSON.org提供的一个纯Java实现的JSON解析库,它提供了对JSON的创建、解析和序列化等功能...
总的来说,`org.json.jar`库为Java开发者提供了一个简单易用的JSON处理工具,无论是在解析JSON字符串,还是在构建JSON对象,甚至是与其他格式(如XML、HTTP头、Cookies)之间的转换,都提供了极大的便利。...
1. **JSON解析**:通过`JSON.parse()`方法,可以将一个JSON格式的字符串转换为JavaScript对象。例如: ```javascript var jsonString = '{"name":"John", "age":30, "city":"New York"}'; var jsonObject = JSON....
本示例"JSON解析demo.zip"提供的可能是一个使用自定义封装类快速解析JSON数据的实例,这对于简化代码和提高效率非常有用。 首先,我们来了解`org.json`库中的主要类: 1. **JSONObject**:代表一个JSON对象,它由...
json3.js 【JS / JavaScript 中...JavaScript中解析JSON --- JSON.parse()、JSON.stringify()以及$.parseJSON()使用详解 - chunlynn的小屋 - CSDN博客 http://blog.csdn.net/chenchunlin526/article/details/78850924
例如,你可以使用`JSONArray`、`JSONObject`等类进行JSON的创建、解析和操作。 总的来说,`net.sf.json`库是Java开发中处理JSON数据的一个强大工具,能够帮助开发者轻松地进行JSON数据的序列化和反序列化,提高了...
阿里JSON解析包1.2.9.jar是一款由阿里巴巴开发的高效、易用的Java JSON处理库,主要用于数据的序列化和反序列化操作。在Java编程中,JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,广泛应用于前后...
易语言源码易语言水淼JSON解析模块源码.rar 易语言源码易语言水淼JSON解析模块源码.rar 易语言源码易语言水淼JSON解析模块源码.rar 易语言源码易语言水淼JSON解析模块源码.rar 易语言源码易语言水淼JSON解析模块...
在.NET开发领域,C#语言提供了多种方式来处理JSON数据,其中最受欢迎的库之一就是Newtonsoft.Json.dll。这个库由James Newton-King 开发,它为C#开发者提供了丰富的功能,便于序列化和反序列化JSON,使得JSON数据在...
YAJL (Yet Another JSON Library) 是一个小型事件驱动(SAX风格)的 JSON 解析器,采用 ANSI C 编写。 标签:YAJL
本教程将深入探讨如何使用Newtonsoft.Json库在C#中解析包含数组的JSON对象,这对于处理从Web API、数据库或其他服务获取的复杂数据至关重要。 首先,我们需要了解Newtonsoft.Json库,它也被称为Json.NET,是一个...
易语言源码页面订单json解析易语言源码.rar 易语言源码页面订单json解析易语言源码.rar 易语言源码页面订单json解析易语言源码.rar 易语言源码页面订单json解析易语言源码.rar 易语言源码页面订单json解析易语言...
org.json.jar是Java平台上的一个库,它提供了一系列API,方便开发者处理JSON对象,包括序列化和反序列化Java对象为JSON格式,以及解析JSON文本。 在Java开发中,org.json.jar库是非常常用的工具,它包含了一些核心...
这个资源包`org.json.jar`正是这个库的实现,它包含了一系列的类和方法,使得在Java程序中处理JSON变得简单。 `org.json`库的核心类主要包括以下几个: 1. **JSONObject**: 这个类代表了一个JSON对象,可以存储...
`org.json.jar` 包是Java开发中广泛使用的开源库,主要用于处理JSON(JavaScript Object Notation)数据。JSON是一种轻量级的数据交换格式,因其简洁、易于读写和解析的特性,被广泛应用在Web服务和应用程序之间进行...
在Unity中,如果需要在WebGL平台上使用JSON解析功能,可能需要使用Unity内置的JsonUtility类,或者使用第三方的JSON库,如Newtonsoft.Json(又名Json.NET),因为System.Web.Extensions可能不直接适用于WebGL环境。...
在实际开发中,使用org.json库可以非常便捷地处理JSON数据,例如从网络响应中解析JSON,将Java对象序列化为JSON,或者对JSON数据进行查询和修改。这个库简单易用,对于小型项目和快速原型开发尤其适用。在大型项目中...
在CJSON标签中,我们可以推测这个包可能还包含了CJSON库,这是一个轻量级的JSON解析和生成库,适合资源有限的嵌入式系统。CJSON与Jansson类似,提供了解析JSON字符串和生成JSON文本的功能,但在内存管理和性能上做了...