一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

服務器之家 - 編程語言 - JAVA教程 - 淺談使用java解析和生成JSON

淺談使用java解析和生成JSON

2020-01-03 14:48hebedich JAVA教程

在www.json.org上公布了很多JAVA下的json構造和解析工具,其中google-gson和org.json比較簡單,兩者使用上差不多但還是有些區別。下面我們就來分別介紹下用他們構造和解析Json數據的方法示例。

JSON概述

JSON即javascript object notation,是javascript對象表示法的子集。具有以下特點:

數據放在鍵值對中;
數據由逗號分隔;
花括號表示對象;
方括號表示數組。

JSON的值可以是:

數字(整數或浮點數)
字符串(在雙引號中)
邏輯值(true或false)
數組(方括號內)
對象(花括號內)
null

JSON的基本語法

JSON對象

JSON對象在花括號中書寫,對象可以包含多個鍵值對,例如:

?
1
2
3
4
{
  "firstName":"John",
  "lastName":"Doe"
}

JSON數組

JSON數組在方括號中書寫,數組中可以包含多個對象,例如:

?
1
2
3
4
5
6
7
{
  "employees":[
    {"firstName":"John","lastName":"Doe"},
    {"firstName":"Anna","lastName":"Smith"},
    {"firstName":"Peter","lastName":"Jones"}
  ]
}

在以上的實例中,根部的花括號表示這是一個JSON對象,該對象的鍵是employees,值是一個JSON數組,在這個數組中有3個JSON對象,每個JSON對象之間也使用逗號分隔。

使用java讀取JSON數據

在JSON官網我們可以查看到各個語法對json的支持,對于java來說比較成熟的是google-gson。

淺談使用java解析和生成JSON

其maven依賴如下:

?
1
2
3
4
5
<dependency>
  <groupId>com.google.code.gson</groupId>
  <artifactId>gson</artifactId>
  <version>2.2.4</version>
</dependency>

現在編寫程序解析以下的test.json:

?
1
2
3
4
5
6
7
8
9
{
  "cat":"it",
  "languages":[
    {"id":1,"ide":"Eclipse","name":"Java"},
    {"id":2,"ide":"Xcode","name":"Swift"},
    {"id":3,"ide":"Visual Studio","name":"C#"}
  ],
  "pop":true
}

以下的代碼將解析以上的json數據:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public void readJSON() throws Exception{
 
  // 創建json解析器
  JsonParser parser = new JsonParser();
  // 使用解析器解析json數據,返回值是JsonElement,強制轉化為其子類JsonObject類型
  JsonObject object = (JsonObject) parser.parse(new FileReader("test.json"));
 
  // 使用JsonObject的get(String memeberName)方法返回JsonElement,再使用JsonElement的getAsXXX方法得到真實類型
  System.out.println("cat = " + object.get("cat").getAsString());
 
  // 遍歷JSON數組
  JsonArray languages = object.getAsJsonArray("languages");
  for (JsonElement jsonElement : languages) {
    JsonObject language = jsonElement.getAsJsonObject();
    System.out.println("id = " + language.get("id").getAsInt() + ",ide = " + language.get("ide").getAsString() + ",name = " + language.get("name").getAsString());
  }
 
  System.out.println("pop = " + object.get("pop").getAsString());
}

使用java生成JSON數據

生成JSON數據的關鍵是JSON對象中的add和addProperty兩個方法。前者用于向JSON對象中添加數組或者另一個JSON對象,后者用于為JSON對象添加屬性。以下的代碼將生成上面例子中的test.json。

?
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
30
31
32
33
public void createJSON() throws IOException{
 
  JsonObject object = new JsonObject(); // 創建一個json對象
  object.addProperty("cat", "it");    // 為json對象添加屬性 
 
  JsonArray languages = new JsonArray(); // 創建json數組
  JsonObject language = new JsonObject();
  language.addProperty("id", 1);
  language.addProperty("ide", "Eclipse");
  language.addProperty("name", "java");
  languages.add(language);        // 將json對象添加到數組
 
  language = new JsonObject();
  language.addProperty("id", 2);
  language.addProperty("ide", "XCode");
  language.addProperty("name", "Swift");
  languages.add(language);
 
  language = new JsonObject();
  language.addProperty("id", 3);
  language.addProperty("ide", "Visual Studio");
  language.addProperty("name", "C#");
  languages.add(language);
 
  object.add("languages", languages);  // 將數組添加到json對象 
  object.addProperty("pop", true);
 
  String jsonStr = object.toString();  // 將json對象轉化成json字符串
  PrintWriter pw = new PrintWriter(new BufferedWriter(new FileWriter("data.json")));
  pw.print(jsonStr);
  pw.flush();
  pw.close();
}

 

在JAVA中構造和解析JSON我用的是org.json,下面是兩個函數,一個是創建JSON,一個是從文本構造JSON并解析之。

創建json

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
//construct json and output it 
public String jsonTest() throws JSONException{
  JSONObject json=new JSONObject();
  JSONArray jsonMembers = new JSONArray();
  JSONObject member1 = new JSONObject();
  member1.put("loginname", "zhangfan");
  member1.put("password", "userpass");
  member1.put("email","[email protected]");
  member1.put("sign_date", "2007-06-12");
  jsonMembers.put(member1);
 
  JSONObject member2 = new JSONObject();
  member2.put("loginname", "zf");
  member2.put("password", "userpass");
  member2.put("email","[email protected]");
  member2.put("sign_date", "2008-07-16");
  jsonMembers.put(member2);
  json.put("users", jsonMembers);
 
  return json.toString();
}

 解析json

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
//construct json from String and resolve it.
public String jsonTest2() throws JSONException{
  String jsonString="{\"users\":[{\"loginname\":\"zhangfan\",\"password\":\"userpass\",\"email\":\"[email protected]\"},{\"loginname\":\"zf\",\"password\":\"userpass\",\"email\":\"[email protected]\"}]}";
  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;
}

 JAVA中處理JSON還是相當方便的。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 国产卡一卡二卡3卡乱码免费 | 欧美一级片在线看 | 校服下的白嫩小乳尖h1v1 | 国产成人综合亚洲一区 | 羞羞漫画免费漫画页面在线看漫画秋蝉 | 日日操视频 | 日本护士xxxx视频免费 | 男人天堂中文字幕 | 国产男女爱视频在线观看 | 久久久久免费视频 | 国产精品一久久香蕉产线看 | 午夜一区二区福利视频在线 | 国内精品视频一区二区三区八戒 | h版欧美大片免费观看 | 福利姬 magnet | 女人张开腿 让男人桶个爽 免费观看 | 青青草国产青春综合久久 | 四虎在线永久免费视频网站 | 亚洲 日本 中文字幕 制服 | 精品国产中文字幕在线视频 | 毛片视频网站 | 亚洲国产日韩制服在线观看 | 波多野结衣久久国产精品 | 亚州精品永久观看视频 | 国产欧美一区二区精品久久久 | 亚洲免费大全 | 国产成人刺激视频在线观看 | 俄罗斯图书馆无打码久久 | 国产精品第2页 | 精品国产一区二区三区久久影院 | 日韩高清一区二区三区不卡 | 99热这里只有精品一区二区三区 | 8天堂资源在线官网 | 国产午夜亚洲精品不卡 | 67194久久| chaopeng在线观看 | bt伙计最新合集 | 亚洲成在人线视频 | 美女扒下内裤让男人桶的图片 | 国产草 | 欧美一区二区三区精品国产 |