❶ android 解析json用那個包裡面的方法比較好呢
android 解析json還有用Google出品的Gson比較好,具體步驟為:
1、首先,從 code.google.com/p/google-gson/downloads/list下載GsonAPI:
google-gson-1.7.1-release.zip 把gson-1.7.jar 到libs(項目根目錄新建一個libs文件夾)中。 可以使用以下兩種方法解析JSON數據,通過獲取JsonReader對象解析JSON數據。
代碼如下:
String jsonData = "[{\"username\":\"arthinking\",\"userId\":001},{\"username\":\"Jason\",\"userId\":002}]";
try{
JsonReader reader = new JsonReader(new StringReader(jsonData));
reader.beginArray();
while(reader.hasNext()){
reader.beginObject();
while(reader.hasNext()){
String tagName = reader.nextName();
if(tagName.equals("username")){
System.out.println(reader.nextString());
}
else if(tagName.equals("userId")){
System.out.println(reader.nextString());
}
}
reader.endObject();
}
reader.endArray();
}
catch(Exception e){
e.printStackTrace();
}
2、使用Gson對象獲取User對象數據進行相應的操作:
代碼如下:
Type listType = new TypeToken<LinkedList<User>>(){}.getType();
Gson gson = new Gson();
LinkedList<User> users = gson.fromJson(jsonData, listType);
for (Iterator iterator = users.iterator(); iterator.hasNext();) {
User user = (User) iterator.next();
System.out.println(user.getUsername());
System.out.println(user.getUserId());
}
3、如果要處理的JSON字元串只包含一個JSON對象,則可以直接使用fromJson獲取一個User對象:
代碼如下:
String jsonData = "{\"username\":\"arthinking\",\"userId\":001}";
Gson gson = new Gson();
User user = gson.fromJson(jsonData, User.class);
System.out.println(user.getUsername());
System.out.println(user.getUserId());
❷ android用volley怎麼給伺服器發送json
1.下載官網的android SDK(本人用的是eclipse)
2.新建一個android項目:
File->new->andriod Application project
7、下面就是具體的使用post和get請求的代碼:
A:發送get請求如下:
package com.example.xiaoyuantong;
import java.util.HashMap;
import java.util.Iterator;
import org.json.JSONException;
import org.json.JSONObject;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.widget.TextView;
import com.android.volley.Request;
import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.JsonObjectRequest;
import com.android.volley.toolbox.Volley;
/**
* Demo
*/
public class MainActivity extends Activity {
private RequestQueue requestQueue ;
@Override
protected void onCreate(Bundle savedInstanceState) {
簡旁模super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
init();
}
private void init() {
TextView textView = (TextView)findViewById(R.id.textView);
requestQueue = Volley.newRequestQueue(this);
getJson();
textView.setText("hello");
}
private void getJson(){
String url = "http://192.168.20.1:8080/xiaoyuantong/userAction!register.action?pwd='測試'";
JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(
Request.Method.GET, url, null,
new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
//這里可以列印出接受到返回的json
Log.e("bbb", response.toString());
攔緩}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError arg0) {
// System.out.println("sorry,Error");
Log.e("aaa", arg0.toString());
}
});
requestQueue.add(jsonObjectRequest);
}
}
B:發送post請求如下:
package com.example.xiaoyuantong;
import java.util.HashMap;
import java.util.Map;
import org.json.JSONException;
import org.json.JSONObject;
import com.android.volley.Request;
import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.JsonObjectRequest;
import com.android.volley.toolbox.Volley;
import android.os.Bundle;
import android.app.Activity;
import android.util.Log;
import android.view.Menu;
import android.widget.TextView;
public class PostActivity extends Activity {
private RequestQueue requestQueue ;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_post);
init();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.post, menu);
return true;
}
private void init() {
TextView textView = (TextView)findViewById(R.id.postView);
requestQueue = Volley.newRequestQueue(this);
getJson();
textView.setText("hellopost");
}
private void getJson(){
String url = "http://192.168.20.1:8080/xiaoyuantong/userAction!reg.action";
JsonObjectRequest jsonObjectRequest ;
JSONObject jsonObject=new JSONObject() ;
try {
jsonObject.put("name", "張三");
jsonObject.put("sex", "女");
} catch (JSONException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
//列印前台向後台要提交的post數據
Log.e("post",jsonObject.toString());
//發送post請求
try{
jsonObjectRequest = new JsonObjectRequest(
Request.Method.POST, url, jsonObject,
new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
//列印請求後獲取的json數據
Log.e("bbb", response.toString());
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError arg0) {
// System.out.println("sorry,Error");
Log.e("aaa", arg0.toString());
}
});
requestQueue.add(jsonObjectRequest);
} catch (Exception e) {
e.printStackTrace();
System.out.println(e + "");
}
requestQueue.start();
}
}
8、在android的logcat裡面能查看到列印的請求
(紅色的顯示的是我在後台請求到數據)
有時候logcat顯示不出數據,可能是消息被過濾了,可以在左邊點擊「減號」刪除過濾
在server端,也就是在myeclipse的建立的另一個後台工程裡面能獲取到請求:
9、後續會補充json數據的解析部分,以及過度到移動雲的部分,上面只是c/s模式下的一個簡單的基於http的請求應答例子。
❸ 探索Android開源框架 - 8. Gson使用及源碼解析
深入解析Android開源框架中的Gson使用及其源碼解析,Gson作為Java語言的高效JSON轉換庫,以其簡潔的API和高性能的特點,成為Android開發中進行數據序列化和反序列化的首選工具。本文將詳細介紹Gson的使用方法,包括基本的解析與生成、屬性重命名、POJO與JSON的欄位映射規則、泛型的封裝、序列化與反序列化過程,以及如何進行欄位過濾與自定義序列化器和反序列化器的實現。
1. **基本的解析與生成**
使用Gson進行JSON字元串解析時,可以通過Gson對象的fromJson方法將JSON字元串轉換為Java對象,反之,使用toJson方法將Java對象轉換為JSON字元串。
2. **屬性重命名**
通過使用@SerializedName註解,可以方便地在POJO類中重命名JSON欄位,以匹配服務端返回的數據結構,從而避免硬編碼的字元串匹配。
3. **POJO與JSON的欄位映射規則**
Gson通過構建一個映射規則來匹配JSON欄位到POJO類的屬性,確保數據的正確解析與生成。這主要通過類型適配器(TypeAdapter)來實現,使得Gson能夠理解如何處理復雜數據類型,如日期、集合等。
4. **泛型的封裝**
在使用Gson進行序列化和反序列化時,可以通過泛型來保證類型安全,確保不會出現類型轉換錯誤。GsonBuilder提供了一系列方法來實現泛型的封裝,使得API調用更為清晰和明確。
5. **Gson的序列化、反序列化**
通過Gson的API,可以輕松實現Java對象到JSON字元串的序列化,以及從JSON字元串反序列化到Java對象的過程。這使得數據在不同系統間傳輸變得簡單高效。
6. **欄位過濾**
提供了多種方法進行欄位過濾,如使用@Expose註解、基於版本的過濾、訪問修飾符、以及基於策略的自定義過濾規則,以滿足不同的數據處理需求。
7. **TypeAdapter、JsonSerializer與JsonDeserializer**
實戰中,可能需要處理一些特殊的數據類型或復雜邏輯,這時可以通過實現JsonSerializer或JsonDeserializer來自定義序列化和反序列化過程。TypeAdapter則可以用於處理復雜類型的序列化。
8. **實戰TypeAdapterFactory**
在某些場景下,可以通過實現TypeAdapterFactory來創建自定義的TypeAdapter,從而實現更為靈活的數據處理邏輯。
9. **@JsonAdapter註解**
用於指定自定義的序列化器或反序列化器,簡化了實現自定義序列化邏輯的步驟,使得代碼更為簡潔和易讀。
10. **源碼解析**
通過深入源碼分析,可以更好地理解Gson內部的實現機制,如fromJson方法如何獲取適配器、getAdapter方法如何選擇適配器、Gson的構造方法如何初始化適配器列表,以及如何通過反射機制創建綁定欄位等關鍵邏輯。這不僅有助於解決實際開發中的問題,還能加深對Gson工作的理解,為後續的優化和定製提供基礎。
❹ android json解析三種方式哪種效率最高
Android平台下,解析JSON數據的方式多種多樣,包括org.json包、Google提供的gson庫以及阿里巴巴的fastjson庫等。其中,使用gson庫解析JSON數據的方式更為高效。以Gson為例,解析JSON數據的具體步驟如下:
首先,從Google提供的GsonAPI下載地址下載GsonAPI:google-gson-1.7.1-release.zip。將gson-1.7.jar拷貝到項目根目錄新建的libs文件夾中。解析JSON數據時,可以使用JsonReader對象,通過以下代碼實現:
String jsonData = "[{\"username\":\"arthinking\",\"userId\":001},{\"username\":\"Jason\",\"userId\":002}]";
try{
JsonReader reader = new JsonReader(new StringReader(jsonData));
reader.beginArray();
while(reader.hasNext()){
reader.beginObject();
while(reader.hasNext()){
String tagName = reader.nextName();
if(tagName.equals("username")){
System.out.println(reader.nextString());
}
else if(tagName.equals("userId")){
System.out.println(reader.nextString());
}}
reader.endObject();
}
reader.endArray();
}
catch(Exception e){
e.printStackTrace();
}
或者,可以使用Gson對象獲取User對象數據進行相應的操作,代碼如下:
Type listType = new TypeToken>(){}.getType();
Gson gson = new Gson();
LinkedList users = gson.fromJson(jsonData, listType);
for (Iterator iterator = users.iterator(); iterator.hasNext();) {
User user = (User) iterator.next();
System.out.println(user.getUsername());
System.out.println(user.getUserId());
}
若要處理的JSON字元串僅包含一個JSON對象,則可以直接使用Gson的fromJson方法獲取一個User對象,代碼如下:
String jsonData = "{\"username\":\"arthinking\",\"userId\":001}";
Gson gson = new Gson();
User user = gson.fromJson(jsonData, User.class);
System.out.println(user.getUsername());
System.out.println(user.getUserId());
這種方式不僅代碼簡潔,而且易於維護和擴展,適用於各種規模的應用程序。
❺ android 怎麼用json解析介面(本人新手,請大手幫忙解決下)
fastjson.jar這個jar包可以方便的幫你解析json格式數據:
你可以參考下我這塌飢斗段代碼:
public Object parseMap_Sub(String str) {
try {
Map<String, Object> map = JSON.parseObject(str);
JSONArray jsonArray = (JSONArray) map.get("data");
List<NearMap_Info> list_detial = new ArrayList<NearMap_Info>();
for (Object o : jsonArray) {
Map<String, String> map_1 = (Map<String, String>) o;
NearMap_Info audio_info = new NearMap_Info();
//團磨audio_info.setSize((String) map.get("size"));
audio_info.setFlag(map_1.get("flag"));
audio_info.setTitle(map_1.get("title"));
audio_info.setUrl(map_1.get("url"));
audio_info.setType(map_1.get("type"));
audio_info.setId(map_1.get("id"肢答));
audio_info.setImg(map_1.get("img"));
list_detial.add(audio_info);
}
ro.result = true;
ro.obj = list_detial;
} catch (Exception e) {
e.printStackTrace();
ro.result = false;
}
return ro;
}
❻ android 怎樣將數據以json格式保存在手機文件中
json是一種輕量級數據交換格式,可以包含對象和數組,以下是一個json字元串的示例:
{"key":[{"key1":"value1","key2":value2",...}]}
json只是一種數據交換格式,並不是存儲格式,所以只要你正確地組織好json字元串後,跟其他文件是一樣存儲的;
同時建議你,如果你存儲的數據量比較多的話,建議存儲在android系統自帶的SQLite資料庫中,這樣操作起數據來更方便簡單;如果數據量非常少,只有三五個欄位存儲,那樣使用android的SharedPreferences可能會是更好的選擇,希望你根據應用需求適當選用。