JSON格式的服務接口:http://www.cnblogs.com/visec479/articles/4118338.html
首先來了解下JSON格式解析
json結構的格式就是若干個 鍵/值(key, value) 對的集合,該集合可以理解為字典(Dictionary),每個 鍵/值 對可以理解成一個對象(Object)。 鍵/值 對中的 鍵(key) 一般是 一個string,值(value)可以是string、double、int等基本類型,也可以嵌套一個 鍵/值 對,也可以是一個數組,數組里面的數據的類型可以是基本類型,或者 鍵/值 對。可以看出 鍵/值 本來沒什么,只是嵌套得多了就會覺得混亂,下面舉個具體的例子來說明。注:該代碼只是用來舉例說明,並不能正確運行。
1 var testJson = {
2 "Name" : "奧巴馬" ,
3 "ByName" : ["小奧","小巴","小馬"],
4 "Education" : {
5 "GradeSchool" : "華盛頓第一小學",
6 "MiddleSchool" : ["華盛頓第一初中" , "華盛頓第一高中"],
7 "University" : {
8 "Name" : "哈佛大學",
9 "Specialty" : ["軟件工程","會計"]
10 }
11 }
12 }
變量testJson就是一個json對象,testJson對象包括三個 鍵/值 對。
第一個 鍵/值 對: 鍵(key)是"Name“ ,其對應的值(value)是 "奧巴馬" ,即 testJson["Name"] == "奧巴馬"
第二個 鍵/值 對: 鍵 是 "ByName" ,值是一個數組,是一個string集合。有必要的話,數組里面的元素也可以是 鍵/值 對。
第三個 鍵/值 對: 鍵 是 "Education",值是一個 Json對像,該json對象包括三個 鍵/值 對,這就是嵌套了。。。
總結:json對象就是若干個 鍵/值 對的集合,鍵是string,值可以是基本類型,或者嵌套一個Json對象,或者是一個數組(數組里的元素可以是基本類型,也可以是json對象,可以繼續嵌套)。
獲取名字:testJson["Name"]
獲取第一個別名:testJson["ByName"][0] 。testJson的 鍵"ByName" 對應的值 是一個string數組
獲取小學名字: testJson["Education"]["GradeSchool"] , 獲取大學主修專業:testJson["Education"]["University"]["Specialty"][0]
下面舉個實例:
定義一個符合json格式要求的字符串:
string testJson = "{\"Name\" : \"奧巴馬\",\"ByName\" : [\"小奧\",\"小巴\",\"小馬\"],\"Education\":{\"GradeSchool\" : \"華盛頓第一小學\",\"MiddleSchool\" : [\"華盛頓第一初中\" , \"華盛頓第一高中\"], \"University\" :{ \"Name\" : \"哈佛大學\", \"Specialty\" : [\"軟件工程\",\"會計\"]}}}";
然后需要用該字符串作為參數new 一個 JsonObject對象。微軟自帶的類庫 System.Json ,然后添加命名空間 using System.Json;
主要代碼就一句:JsonObject js = JsonObject.Parse(testJson); 用字符串testJson 作為參數new 一個 JsonObject 對象。通過監視我們可以看到js里面的內容和預料的一樣,通過下面這幅圖你應該可琢磨出很多東西來吧
額外插一句:js["Education"]["University"]["Specialty"] 的內容是 {[ "軟件工程", "會計"]},
但js["Education"]["University"]["Specialty"].Contains( "軟件工程") 的值 是false。原因自己琢磨
通過Servlet創建服務端JSON數據
服務端提供JSON數據接口:http://192.168.0.129:8080/JSONInterface/JsonServlet
package JsonManager; import java.io.IOException; import java.io.PrintWriter; import java.util.HashMap; import java.util.Map; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import net.sf.json.JSONObject; /** * JSONObject 創建一個JSON對象並out.write(); * @author Dana·Li */
public class JsonServlet extends HttpServlet { private static final long serialVersionUID = 1L; public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.doPost(request, response); } @SuppressWarnings({ "rawtypes", "unchecked" }) public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html"); response.setCharacterEncoding("UTF-8"); //解決中文亂碼問題
PrintWriter out = response.getWriter(); Map map = new HashMap(); map.put("name", "Dana、Li"); map.put("age", new Integer(22)); map.put("Provinces", new String("廣東省")); map.put("citiy", new String("珠海市")); map.put("Master", new String("C、C++、Linux、Java")); JSONObject json = JSONObject.fromObject(map); out.write(json.toString()); out.flush(); out.close(); } }
開啟服務查看是否已經開啟~
客戶端調用接口解析JSON數據
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.net.URL; import java.net.URLConnection; /** * 接收服務端Json數據 * @author Dana·Li */
public class GetJsonInterfaceInfo{ private static String urlPath="http://192.168.0.129:8080/JSONInterface/JsonServlet"; /** * @param args * @throws IOException */
public static void main(String[] args) throws IOException { //ServerFactory.getServer(8080).start();
//列出原始數據
StringBuilder json = new StringBuilder(); URL oracle = new URL(GetJsonInterfaceInfo.urlPath); URLConnection yc = oracle.openConnection(); BufferedReader in = new BufferedReader(new InputStreamReader(yc.getInputStream(),"UTF-8")); String inputLine = null; while ( (inputLine = in.readLine()) != null){ json.append(inputLine); } in.close(); String Strjson=json.toString(); System.out.println("原始數據:"); System.out.println(Strjson.toString()); } }
本文基於
署名 2.5 中國大陸許可協議發布,歡迎轉載,演繹或用於商業目的,但是必須且在文章頁面明顯位置給出原文鏈接
Dana、Li(包含鏈接),具體操作方式可參考此處。如您有任何疑問或者授權方面的協商,請留言或加Q群!
|