如果不是Android开发环境的话,首先需要引入处理JSON数据的包:json-lib-223-jdk15jar
Java样例程序如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
import netsfjsonJSONArray;
import netsfjsonJSONObject;
public class DoJSON {
public static void main(String[] args) {
JSONArray employees = new JSONArray(); //JSON数组
JSONObject employee = new JSONObject(); //JSON对象
employeeput("firstName", "Bill"); //按“键-值”对形式存储数据到JSON对象中
employeeput("lastName", "Gates");
employeesadd(employee); //将JSON对象加入到JSON数组中
employeeput("firstName", "George");
employeeput("lastName", "Bush");
employeesadd(employee);
employeeput("firstName", "Thomas");
employeeput("lastName", "Carter");
employeesadd(employee);
Systemoutprintln(employeestoString());
for(int i=0; i<employeessize(); i++) {
JSONObject emp = employeesgetJSONObject(i);
Systemoutprintln(emptoString());
Systemoutprintln("FirstName :\t" + empget("firstName"));
Systemoutprintln("LastName : \t" + empget("lastName"));
}
}
}
运行效果:
[{"firstName":"Bill","lastName":"Gates"},{"firstName":"George","lastName":"Bush"},{"firstName":"Thomas","lastName":"Carter"}]
{"firstName":"Bill","lastName":"Gates"}
FirstName : Bill
LastName : Gates
{"firstName":"George","lastName":"Bush"}
FirstName : George
LastName : Bush
{"firstName":"Thomas","lastName":"Carter"}
FirstName : Thomas
LastName : Carter
给服务端发送请求后,服务端会返回一连串的数据,这些数据在大部分情况下都是XML格式或者JSON格式。然后JSON相对XML来说解析相对方便一些,所以先说说JSON的解析。
JSON的基本数据格式有这几种:
1一个JSON对象——JSONObject
{"name":"胡小威" , "age":20 , "male":true}
2一个JSON数组——JSONArray
[{"name":"胡小威" , "age":20 , "male":true},{"name":"赵小亮" , "age":22 , "male":false}]
3复杂一点的JSONObject
{"name":"胡小威", "age"=20, "male":true, "address":{"street":"岳麓山南", "city":"长沙","country":"中国"}}
4复杂一点的JSONArray
[
{"name":"胡小威", "age"=20, "male":true, "address":{"street":"岳麓山南", "city":"长沙","country":"中国"}},
{"name":"赵小亮", "age"=22, "male":false, "address":{"street":"九州港", "city":"珠海","country":"中国"}}
]
5来个更复杂的,这是我从爱帮公交上扒取的数据
{"buses":{"bus":[{"last_foot_dist":"0","time":"37","segments":{"segment":[{"line_name":"立珊专线(中南大学学生公寓-长沙火车站)","foot_dist":"362","stat_xys":"","stats":"岳麓山南;湖南师大;二里半;岳麓山北;市四医院;华图教育(太平街口);牛耳教育(南阳街口);韭菜园;曙光路口;长岛路口;长沙火车站","end_stat":"长沙火车站","line_xys":"","line_dist":"7535","start_stat":"岳麓山南"}]},"foot_dist":"362","dist":"7897"},{"last_foot_dist":"0","time":"41","segments":{"segment":[{"line_name":"旅1路(科教新村-长沙火车站)","foot_dist":"337","stat_xys":"","stats":"岳麓山南;湖南师大;二里半;岳麓山北;市四医院;华图教育(太平街口);蔡锷中路口;韭菜园;乔庄;曙光路口;长岛路口;五一东村;车站路口;长沙火车站","end_stat":"长沙火车站","line_xys":"","line_dist":"7822","start_stat":"岳麓山南"}]},"foot_dist":"337","dist":"8159"}]}}
接下来是解析部分
一、直接解析
1{"name":"胡小威" , "age":20 , "male":true}
Java代码
public void parseJsonObject(String json) {
try {
JSONObject jsonObject = new JSONObject(json);
String name = jsonObjectgetString("name");
int age = jsonObjectgetInt("age");
boolean male = jsonObjectgetBoolean("male");
//接下来该干嘛干嘛
} catch (JSONException e) {
// TODO Auto-generated catch block
eprintStackTrace();
}
}
2[{"name":"胡小威" , "age":20 , "male":true},{"name":"赵小亮" , "age":22 , "male":false}]
Java代码
public void parseJSONArray(String json) {
try {
JSONArray jsonArray = new JSONArray(json);
for (int i = 0; i < jsonArraylength(); i++) {
jsonObject = jsonArraygetJSONObject(i);
String name = jsonObjectgetString("name");
int age = jsonObjectgetInt("age");
boolean male = jsonObjectgetBoolean("male");
//接下来该干嘛干嘛
}
} catch (JSONException e) {
// TODO Auto-generated catch block
eprintStackTrace();
}
}
3{"name":"胡小威", "age"=20, "male":true, "address":{"street":"岳麓山南", "city":"长沙","country":"中国"}}
Java代码
public void parseJsonPerson(String json) {
try {
JSONObject jsonObject = new JSONObject(json);
String name = jsonObjectgetString("name");
int age = jsonObjectgetInt("age");
boolean male = jsonObjectgetBoolean("male");
JSONObject addressJSON = jsonObjectgetJSONObject("address");
String street = addressJSONgetString("street");
String city = addressJSONgetString("city");
String country = addressJSONgetString("country");
Address address = new Address(street, city, country);
Person person = new Person(name, age, male, address);
} catch (JSONException e) {
// TODO Auto-generated catch block
eprintStackTrace();
}
}
4
[
{"name":"胡小威", "age"=20, "male":true, "address":{"street":"岳麓山南", "city":"长沙","country":"中国"}},
{"name":"赵小亮", "age"=22, "male":false, "address":{"street":"九州港", "city":"珠海","country":"中国"}}
]
Java代码
public void parseJsonArrayPerson(String json) {
List<Person> persons = new ArrayList<Person>();
try {
jsonArray = new JSONArray(json);
for (int i = 0; i < jsonArraylength(); i++) {
jsonObject = jsonArraygetJSONObject(i);
String name = jsonObjectgetString("name");
int age = jsonObjectgetInt("age");
boolean male = jsonObjectgetBoolean("male");
JSONObject addressJSON = jsonObjectgetJSONObject("address");
String street = addressJSONgetString("street");
String city = addressJSONgetString("city");
String country = addressJSONgetString("country");
Address address = new Address(street, city, country);
Person person = new Person(name, age, male, address);
personsadd(person);
Logv("juno", persontoString());
}
} catch (JSONException e) {
// TODO Auto-generated catch block
eprintStackTrace();
}
Logv("juno", personstoString());
}
5 {"buses":{"bus":[{"last_foot_dist":"0","time":"37","segments":{"segment":[{"line_name":"立珊专线(中南大学学生公寓-长沙火车站)","foot_dist":"362","stat_xys":"","stats":"岳麓山南;湖南师大;二里半;岳麓山北;市四医院;华图教育(太平街口);牛耳教育(南阳街口);韭菜园;曙光路口;长岛路口;长沙火车站","end_stat":"长沙火车站","line_xys":"","line_dist":"7535","start_stat":"岳麓山南"}]},"foot_dist":"362","dist":"7897"},{"last_foot_dist":"0","time":"41","segments":{"segment":[{"line_name":"旅1路(科教新村-长沙火车站)","foot_dist":"337","stat_xys":"","stats":"岳麓山南;湖南师大;二里半;岳麓山北;市四医院;华图教育(太平街口);蔡锷中路口;韭菜园;乔庄;曙光路口;长岛路口;五一东村;车站路口;长沙火车站","end_stat":"长沙火车站","line_xys":"","line_dist":"7822","start_stat":"岳麓山南"}]},"foot_dist":"337","dist":"8159"}]}}
Java代码
public List<Salution> parseJSON(String str){
Logd("返回的JSON数据:", str);
List<Salution> busList = new ArrayList<Salution>();
try {
JSONObject jsonObject = new JSONObject(str);
JSONObject busesJSON = jsonObjectgetJSONObject("buses");
JSONArray busJSArray=busesJSONgetJSONArray("bus");
for(int i=0;i<busJSArraylength();i++){
JSONObject busJSObject = busJSArraygetJSONObject(i);
JSONObject segsJSObject=busJSObjectgetJSONObject("segments");
JSONArray segJSArray=segsJSObjectgetJSONArray("segment");
Salution st=new Salution();
for(int j=0;j<segJSArraylength();j++){
if(j==0){
JSONObject segJSObject = segJSArraygetJSONObject(j);
stsetLine_name1(segJSObjectgetString("line_name"));
Logd("line_name", segJSObjectgetString("line_name"));
stsetStats1(segJSObjectgetString("stats"));
stsetEnd_stat1(segJSObjectgetString("end_stat"));
stsetStart_stat1(segJSObjectgetString("start_stat"));
}
if(j==1){
JSONObject segJSObject = segJSArraygetJSONObject(j);
stsetLine_name2(segJSObjectgetString("line_name"));
Logd("line_name", segJSObjectgetString("line_name"));
stsetStats2(segJSObjectgetString("stats"));
stsetEnd_stat2(segJSObjectgetString("end_stat"));
stsetStart_stat2(segJSObjectgetString("start_stat"));
}
}
busListadd(st);
}
return busList;
} catch (JSONException e) {
// TODO Auto-generated catch block
eprintStackTrace();
}
return null;
}
这里我只是简单获取了几个我想要的数据。
二、使用JSON类库Gson 来解析JSON
Gson 是 Google 提供的用来在 Java 对象和 JSON 数据之间进行映射的 Java 类库。可以将一个 JSON 字符串转成一个 Java 对象,或者反过来。
首先,从 codegooglecom/p/google-gson/downloads/list下载GsonAPI
Java代码
google-gson-171-releasezip
再把gson-17jar copy到libs
可以使用两种方法解析
①、通过获取JsonReader对象解析JSON数据:
Java代码
String jsonData = "[{\"username\":\"arthinking\",\"userId\":001},{\"username\":\"Jason\",\"userId\":002}]";
try{
JsonReader reader = new JsonReader(new StringReader(jsonData));
readerbeginArray();
while(readerhasNext()){
readerbeginObject();
while(readerhasNext()){
String tagName = readernextName();
if(tagNameequals("username")){
Systemoutprintln(readernextString());
}
else if(tagNameequals("userId")){
Systemoutprintln(readernextString());
}
}
readerendObject();
}
readerendArray();
}
catch(Exception e){
eprintStackTrace();
}
②、通过把JSON数据映射成一个对象,使用Gson对象的fromJson()方法获取一个对象数组进行 *** 作
Java代码
Type listType = new TypeToken<LinkedList<User>>(){}getType();
Gson gson = new Gson();
LinkedList<User> users = gsonfromJson(jsonData, listType);
for (Iterator iterator = usersiterator(); iteratorhasNext();) {
User user = (User) iteratornext();
Systemoutprintln(usergetUsername());
Systemoutprintln(usergetUserId());
}
我一般是采用直接解析,添加类库神马的最讨厌了···
还有,抱怨一下,iteye的编辑弱爆了!!!
转载
JSON有两种表示结构,对象和数组。
对象结构以”{”大括号开始,以”}”大括号结束。中间部分由0或多个以”,”分隔的”key(关键字)/value(值)”对构成,关键字和值之间以”:”分隔,语法结构如下
{
key1:value1,
key2:value2,
}其中关键字是字符串,而值可以是字符串,数值,true,false,null,对象或数组
数组结构以”[”开始,”]”结束。中间由0或多个以”,”分隔的值列表组成,语法结构如下
[
{
key1:value1,
key2:value2
},
{
key3:value3,
key4:value4
}
]
给服务端发送请求后,服务端会返回一连串的数据,这些数据在大部分情况下都是XML格式或者JSON格式。然后JSON相对XML来说解析相对方便一些,所以先说说JSON的解析。
JSON的基本数据格式有这几种:
1一个JSON对象——JSONObject
{"name":"胡小威" , "age":20 , "male":true}
2一个JSON数组——JSONArray
[{"name":"胡小威" , "age":20 , "male":true},{"name":"赵小亮" , "age":22 , "male":false}]
3复杂一点的JSONObject
{"name":"胡小威", "age"=20, "male":true, "address":{"street":"岳麓山南", "city":"长沙","country":"中国"}}
4复杂一点的JSONArray
[
{"name":"胡小威", "age"=20, "male":true, "address":{"street":"岳麓山南", "city":"长沙","country":"中国"}},
{"name":"赵小亮", "age"=22, "male":false, "address":{"street":"九州港", "city":"珠海","country":"中国"}}
]
在 Java 中,可以使用 json 库来解析和遍历 JSON 对象。以下是一个简单的示例代码,展示如何遍历 JSON 对象并取出所有的 value 值:
假设有以下 JSON 对象:
{
"name": "张三",
"age": 20,
"gender": "male"
}
可以使用以下代码遍历 JSON 对象并取出所有的 value 值:
import orgjsonJSONObject;
public class JsonExample {
public static void main(String[] args) {
// JSON 字符串
String jsonStr = "{\"name\":\"张三\",\"age\":20,\"gender\":\"male\"}";
// 将 JSON 字符串转为 JSONObject 对象
JSONObject jsonObject = new JSONObject(jsonStr);
// 遍历 JSONObject 对象,取出所有 value 值
for (String key : jsonObjectkeySet()) {
Systemoutprintln(jsonObjectget(key));
}
}
}
输出结果如下:
张三
20
male
在上面的代码中,首先将 JSON 字符串转为 JSONObject 对象。然后,使用 keySet() 方法获取所有的键名,遍历 JSONObject 对象,使用 get() 方法获取每个键的值并输出。
java解析json字符串时将大括号中的对应为一个类,里面的数据对应为类的属性,最后用数组接受即可。
示例关键代码如下:
//导入 netsfjsonJSONArray和netsfjsonJSONObject 两个jar 包String str = "[{name:'a',value:'aa'},{name:'b',value:'bb'},{name:'c',value:'cc'},{name:'d',value:'dd'}]" ; // 一个未转化的字符串
JSONArray json = JSONArrayfromObject(str ); // 首先把字符串转成 JSONArray 对象
if(jsonsize()>0){
for(int i=0;i<jsonsize();i++){
JSONObject job = jsongetJSONObject(i); // 遍历 jsonarray 数组,把每一个对象转成 json 对象
Systemoutprintln(jobget("name")+"=") ; // 得到 每个对象中的属性值
}
}
以上就是关于Java如何获取JSON的内容全部的内容,包括:Java如何获取JSON的内容、android 怎么看json数据格式、android怎么看json数据格式等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)