JAVA中使用JSON進(jìn)行數(shù)據(jù)傳遞示例
最近在做一個基于JAVA Servlet的WEB應(yīng)用以及對應(yīng)的Anroid應(yīng)用客戶端的開發(fā)工作。
其中,在接口的訪問和數(shù)據(jù)的傳輸方面使用的比較多的是使用JSON對象來操作格式化數(shù)據(jù):在服務(wù)器端采用JSON字符串來傳遞數(shù)據(jù)并在WEB前端或者Android客戶端使用JSON來解析接收到的數(shù)據(jù)。
首先,在JAVA中使用JSON需要引入 org.json 包, 并在程序中引入相應(yīng)的JSON類:
import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject;
其次,在服務(wù)器端的Servlet類中,可以使用如下方法收集數(shù)據(jù)并生成相應(yīng)的JSON字符串
//聲明一個Hash對象并添加數(shù)據(jù)
Map params = new HashMap();
params.put("username", username);
params.put("user_json", user);
//聲明JSONArray對象并輸入JSON字符串
JSONArray array = JSONArray.fromObject(params);
put.println(array.toString());
在WEB前端可以通過javascript直接對JSON字符串進(jìn)行解析,在Android客戶端的話,需要使用JSON類來解析字符串:
//@description: 根據(jù)接收到的JSON字符串來解析字符串中所包含的數(shù)據(jù)和數(shù)據(jù)對象
//接收到的JSON字符串
String result = "[{\"username\": \"your name\", \"user_json\": {\"username\": \"your name\", \"nickname\": \"your nickname\"}}]";
//根據(jù)字符串生成JSON對象
JSONArray resultArray = new JSONArray(result);
JSONObject resultObj = resultArray.optJSONObject(0);
//獲取數(shù)據(jù)項
String username = resultObj.getString("username");
//獲取數(shù)據(jù)對象
JSONObject user = resultObj.getJSONObject("user_json");
String nickname = user.getString("nickname");
其實,主要就是涉及到以下集中數(shù)據(jù)類型之間的轉(zhuǎn)換:
1. String 轉(zhuǎn)換為JSON對象
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
//別忘了添加上JSON包哦!
public class StringToJSON {
public static void main(String[] args) throws JSONException{
System.out.println("abc");
//定義JSON字符串
String jsonStr = "{\"id\": 2," +
" \"title\": \"json title\", " +
"\"config\": {" +
"\"width\": 34," +
"\"height\": 35," +
"}, \"data\": [" +
"\"JAVA\", \"JavaScript\", \"PHP\"" +
"]}";
//轉(zhuǎn)換成為JSONObject對象
JSONObject jsonObj = new JSONObject(jsonStr);
//從JSONObject對象中獲取數(shù)據(jù)
JavaBean bean = new JavaBean();
//根據(jù)屬性名稱獲取int型數(shù)據(jù);
bean.setId(jsonObj.getInt("id"));
//根據(jù)屬性名獲取String數(shù)據(jù);
bean.setTitle(jsonObj.getString("title"));
//根據(jù)屬性名獲取JSONObject類
JSONObject config = jsonObj.getJSONObject("config");
bean.setWidth(config.getInt("width"));
bean.setHeight(config.getInt("height"));
//根據(jù)屬性名獲取JSONArray數(shù)組
JSONArray data = jsonObj.getJSONArray("data");
for(int index = 0, length = data.length(); index < length; index++) {
//這里在org.json.JSONArray對象中居然沒有找到toArray方法,求各位網(wǎng)友給出解決辦法?。?
// bean.setLanguages(String[]);
}
}
}
class JavaBean{
private int id ;
private String title;
private int width;
private int height;
private String[] languages;
//這里省略了設(shè)置器和訪問器
}
2. JSON對象轉(zhuǎn)換為String字符串
public static void main(String[] args) throws JSONException {
//創(chuàng)建JSONObject對象
JSONObject json = new JSONObject();
//向json中添加數(shù)據(jù)
json.put("username", "wanglihong");
json.put("height", 12.5);
json.put("age", 24);
//創(chuàng)建JSONArray數(shù)組,并將json添加到數(shù)組
JSONArray array = new JSONArray();
array.put(json);
//轉(zhuǎn)換為字符串
String jsonStr = array.toString();
System.out.println(jsonStr);
}
最終輸出結(jié)果為: [{"username":"wanglihong","height":12.5,"age":24}]
3. 集合轉(zhuǎn)換為JSONArray對象
public static void main(String[] args)throws JSONException{
//初始化ArrayList集合并添加數(shù)據(jù)
List<String> list = new ArrayList<String>();
list.add("username");
list.add("age");
list.add("sex");
//初始化HashMap集合并添加數(shù)組
Map map = new HashMap();
map.put("bookname", "CSS3實戰(zhàn)");
map.put("price", 69.0);
//初始化JSONArray對象,并添加數(shù)據(jù)
JSONArray array = new JSONArray();
array.put(list);
array.put(map);
//生成的JSON字符串為:[["username","age","sex"],{"price":69,"bookname":"CSS3實戰(zhàn)"}]
}
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
如何解決使用restTemplate進(jìn)行feign調(diào)用new HttpEntity<>報錯問題
這篇文章主要介紹了如何解決使用restTemplate進(jìn)行feign調(diào)用new HttpEntity<>報錯問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-06-06
java 中InputStream,String,File之間的相互轉(zhuǎn)化對比
這篇文章主要介紹了java 中InputStream,String,File之間的相互轉(zhuǎn)化對比的相關(guān)資料,需要的朋友可以參考下2017-04-04

