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

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

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還是相當方便的。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: juliaann大战黑人 | 欧美国产日韩在线 | 国产五月天在线 | 亚洲国产欧美在线人成aaaa20 | 精品久久久久免费极品大片 | 日本人添下面的全过程 | 三级全黄的视频 | 男女男在线精品网站免费观看 | 亚洲国产精品ⅴa在线观看 亚洲国产高清一区二区三区 | gogort99人体专业网站 | 亚洲AV永久无码精品老司机蜜桃 | 操熟美女又肥又嫩的骚屁股 | 国产成人精品一区二三区2022 | www.男人的天堂 | 三星w699| 亚洲网视频 | 亚洲国产欧美在线成人aaaa | 男人肌肌捅女人 | 女医学护士一级毛片 | 极品妖艳许清赵丽全文免费阅读 | 饭冈加奈子乳喷cead144 | 超时空要爱国语完整版在线 | 亚洲福利视频在线观看 | 搞逼综合网 | caoporn超碰最新地址进入 | 亚洲免费视频一区 | 天天gan| fulao在线观看的 | 日韩伦理一区 | 1769亚洲资源站365在线 | 粉嫩国产14xxxxx0000 | 国产免费成人在线视频 | 日韩无砖专区2020在线 | 青草久久伊人 | 三级理论在线观看 | 色99在线| 423hk四虎 | 亚洲成人影院在线观看 | 国产综合亚洲欧美日韩一区二区 | 亚洲九九爱 | 亚洲视频一区在线播放 |