㈠ android開發中怎樣使用Json
android3.0以後有json解析包JsonReader。
還是建議用gson.jar。
㈡ Android開發中應該使用哪一種主流json框架
Gson、FastJson、Jackson每種都有自己的優劣勢。
Gson、FastJson、Jackson綜合對比
三種框架在實現上都使用了反射機制;
三種框架目前仍然在維護,所以從這一點來講,使用任何一個框架都是靠譜的,因為有人在維護,反饋問題可以改,遇到問題也可以問;
三種框架FastJson的包最小(為了方便對比大小,均是對jar包做的統計),只有196K,其次是Gson的227K,Jackson會大很多,超過了1M;
三種框架在1000倍數據量級以內效率都很高、佔用內存也低,效率最高的是FastJson,內存佔用都差不多;1000倍數據量級以上內存佔用會很大,並且平均耗時會超過1S,FastJson表現中規中矩;
json解析、轉換是一件很耗CPU的工作;
三種框架在bean轉換為json時都有很好的易用性,但在json解析的實現上,FastJson使用起來最簡單,其次是Gson;
FastJson對bean有要求,必須要有默認的構造函數,如果bean類沒有默認的構造函數並且是無法修改的(比如拿不到源碼),相比於另外兩個框架會有弱勢。
㈢ Android開發中為什麼很少使用JSON存儲數據
是可以用JSON存儲數據對象的,而且也是Google推薦的,可以取代以實現Serializable來存儲對象的方法。下面是使用JSON存儲數據的原因。
Android開發中,涉及到對象存儲,通常的做法是直接實現`Serializable`。有關這個介面,它保證了實現該介面的類的對象能夠被`ObjectOutput/InputStream`直接輸入輸出,即序列化。這很方便,但是也很不好。
提到『序列化』,大多數人都想到`Serializable`,而實際上『序列化』的只是指「將對象的狀態信息轉換為可以存儲或傳輸的形式的過程」,java的`Serializabe`是位元組序列化的一種。
`Serialziable`的缺點之一是,實現了該介面的類將失去靈活性。這一點《Effective Java》第74條也指出了,實現了這個`Serializable`的類將會依賴這個類的內部演化,根源在於UID(Serial version UID)。如果你沒有指定UID,那麼每次這個類被序列化時都會根據這個類的當前狀態生成一個UID。想像這么一種場景:這個類已經被導出了,比如發給其他公司或部門使用了,然後你又修改了這個類,那麼當你再將這個類發布時,由於UID不同,其他公司或部門的程序員將可能得到一個「InvalidClassException」。
這種情況的根本原因是因為你不能控制序列化的實現,你控制不了UID的生成過程。這就需要一個自定義的序列化形式。在Android中,Google推薦JSON序列化。而且Android程序員也可以使用Gson等工具來進行序列化和反序列化。
和`Serializable`的位元組序列化不同,JSON序列化是字元序列化。
此外,`Serializable`只適合存儲對象。由於在傳輸時`Serializalbe`要做大量IO,Android提供了`Parcelable`。
最後,題主不應該把資料庫和JSON,XML比較,如果要比,也只能把資料庫和文件存儲比。資料庫適合存儲數量大,關系復雜的數據,這樣管理,查閱就很方便。與此相對文件存儲適合數量小,關系簡單的數據。
㈣ JSON的讀取和存放,Android開發!
用HTTPConnection(或HTTPClient)通過Path(或URL)獲取json.以Stream保存在String中.
使用JSONObject通過String構造JSONObject對象.
在JSONObject中可以以(KEY,VALUES)方式獲取值,JSONObject可以生成JSONArray,JSONArray也可解析出JSONObject.
最後,靈活運用.
㈤ Android開發 解析JSON數據格式 如何去掉JSON數
Android開發中如何解析JSON數據格式?
1.JSON解析
(1).解析Object之一:
1 {"url":"http://www。ideaex。net"}
解析方法:
1 JSONObject demoJson = new JSONObject(jsonString);
2 String url = demoJson.getString("url");
(2).解析Object之二:
1 {"name":"android","name":"iphone"}
解析方法:
1 JSONObject demoJson = new JSONObject(jsonString);
2 String name = demoJson.getString("name");
3 String version = demoJson.getString("version");
4 System.out.println("name:"+name+",version:"+version);
(3).解析Array之一:
1 {"number":[1,2,3]}
解析方法:
1 JSONObject demoJson = new JSONObject(jsonString);
2 JSONArray numberList = demoJson.getJSONArray("number");
3 for(int i=0; i<numberList.length(); i++){
4 //因為數組中的類型為int,所以為getInt,其他getString,getLong同用
5 System.out.println(numberList.getInt(i));
6 }
(4).解析Array之二:
1 {"number":[[1],[2],[3]]}
解析方法:
1 //嵌套數組遍歷
2 JSONObject demoJson = new JSONObject(jsonString);
3 JSONArray numberList = demoJson.getJSONArray("number");
4 for(int i=0; i<numberList.length(); i++){
5 //獲取數組中的數組
6 System.out.println(numberList.getJSONArray(i).getInt(0));
7 }
(5).解析Object和Array:
1 {"mobile":[{"name":"android"},{"name":"iphone"}]}
解析方法:
1 JSONObject demoJson = new JSONObject(jsonString);
2 JSONArray numberList = demoJson.getJSONArray("mobile");
3 for(int i=0; i<numberList.length(); i++){
4 System.out.println(numberList.getJSONObject(i).getString("name"));
5 }
所以,我們發現get後面接著的是你想要的得到的結果的類型:getType,這個對理解很有幫助。
(6).使用optType:
上面的例子,使用getType在碰到查找不到節點的時候,會拋出異常。
如果使用optType,找不到節點,則返回null或者默認值。
1 //無url節點,拋出異常
2 String url = demoJson.getString("url");
3 //無url節點,返回空,如果為基本類型,則返回默認值
4 String url = demoJson.optString("url");
(7).UTF-8的BOM頭導致解析JSON異常的問題
到json文件保存為utf-8的時候,在windows平台下,會產生bom頭"EF BB EF"位元組在文本的最前面(需要用十六進制工具打開才能看的到)。
有兩種解決方法:
a.使用UltraEdit打開json文件,另存為的時候,選擇格式UTF-8,無BOM頭,如果還不行,在用記事本打開,另存為UTF-8下,多試幾次就可以了。
b.使用代碼處理,截取json主體內容:
1 String jsonString = getJsonString();
2 jsonString = jsonString.substring(jsonString.indexOf("{"),jsonString.lastIndexOf("}")+1);
2.JSON必知
(1).JSON是一種輕量級的數據交換格式
(2).JSON基於兩種數據結構:Object和Array。其中Object是「名稱/值」對的集合。
(3).對象:大括弧,每一組string-value結合以","分隔,string和value以冒號分隔。
(4).數組:
(5).string由雙引號包圍的任意數量Unicode字元的集合,使用反斜線轉義。
(6).value可以是雙引號括起來的字元串(string)、數值(number)、true、false、 null、對象(object)或者數組(array)。這些結構可以嵌套。
(7).空白可以加入到任何符號之間,包括空格,tab,回車,換行等。
(8).舉例:
a.Object實例:
01 {
02 "Image": {
03 "Width": 800,
04 "Height": 600,
05 "Title": "View from 15th Floor",
06 "Thumbnail": {
07 "Url": "http://www.example.com/image/481989943",
08 "Height": 125,
09 "Width": "100"
10 },
11 "IDs": [116, 943, 234, 38793]
12 }
13 }
b.Array實例:
01 [
02 {
03 "precision": "zip",
04 "Latitude": 37.7668,
05 "Longitude": -122.3959,
06 "Address": "",
07 "City": "SAN FRANCISCO",
08 "State": "CA",
09 "Zip": "94107",
10 "Country": "US"
11 },
12 {
13 "precision": "zip",
14 "Latitude": 37.371991,
15 "Longitude": -122.026020,
16 "Address": "",
17 "City": "SUNNYVALE",
18 "State": "CA",
19 "Zip": "94085",
20 "Country": "US"
21 }
22 ]
㈥ Android 如何引用本地json文件
有時候遇到要一些模擬數據的時候,要麼寫個List<T>,要麼寫死.
然後數據比較多的時候可以引用本地資源文件,記錄下如何使用本地json文件
<1>在java同級目錄下創建"assets"資源文件夾
<2>編輯json文本內容
至於json文件夾內容 就自定義了,想要什麼內容寫什麼,對於一個做項目多了的開發者而言 json數據是熟悉到不能再熟悉的了
以下是我在淘寶一個個復制過來自己拼裝的一些商品數據
不需要加任何標識,只需要標準的json數據格式就可以了
<3>引用和json解析的工具類,解析用的 Gson也是經常用到的
<4>最後在需要的地方引用,"ExchangeBean"是根據json內容寫的一個模型,用於接收存放數據
有時間再補上demo,下面是效果圖:
㈦ Android開發中應該使用哪一種主流json框架
Android開發中應該使用的主流json框架有三種,分別是gson、fastjson、jackson這三種。
各自的區別:
gson:谷歌開發的gson很受國內外人士常使用,不過使用率低於fastjson,耗費內存多。
fastjson:框架的fastjson是最小的,屬於老牌並且國內開發者經常使用,fastjson必須有默認的構造函數。
jackson:jackson屬於小眾開發者使用的,jackson的框架包是最大的。
㈧ 在Android開發環境中,麻煩幫我解析一下這段JSON數據,謝謝!
寫在Android的Activity中的代碼:
importandroid.app.Activity;
importandroid.os.Bundle;
importjava.util.Iterator;
importorg.json.JSONObject;
{
@Override
publicvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
try{
Stringdata="{"DbNo":"db001","code":0,"fileBackup":"http://192.168.4.178:8888/","filePrior":"http://192.168.4.178:8888/","fileServerIp":"192.168.4.178","fileServerIpBackUp":"192.168.4.178","fileServerPort":"8888","fileServerPortBackUp":"8888","msg":"","msgserverIpBackUp":"192.168.4.178","msgserverPortBackUp":"8100","port":"65531","priorIP":"192.168.4.178","userPass":"|2128"}";
JSONObjectobj=newJSONObject(data);
Iterator<?>it=obj.keys();
Stringkey;
while(it.hasNext()){
key=it.next().toString();
System.out.println(key+":"+obj.getString(key));
}
}
catch(Exceptione){
System.out.println(e.toString());
}
}
}
測試後,在Logcat中的輸出: