新聞中心
在 Android 應(yīng)用開發(fā)中,使用數(shù)據(jù)庫(kù)對(duì)數(shù)據(jù)進(jìn)行存儲(chǔ)和操作是非常常見(jiàn)的。而 ON,作為一種輕量級(jí)數(shù)據(jù)交換格式,也被廣泛用于數(shù)據(jù)傳輸和存儲(chǔ)。本文將深入剖析 Android 數(shù)據(jù)庫(kù)中使用 ON 數(shù)據(jù)的方法。

在岳塘等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強(qiáng)發(fā)展的系統(tǒng)性、市場(chǎng)前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供網(wǎng)站建設(shè)、網(wǎng)站制作 網(wǎng)站設(shè)計(jì)制作按需網(wǎng)站開發(fā),公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),品牌網(wǎng)站設(shè)計(jì),全網(wǎng)營(yíng)銷推廣,成都外貿(mào)網(wǎng)站建設(shè)公司,岳塘網(wǎng)站建設(shè)費(fèi)用合理。
一、什么是 ON
ON(JavaScript Object Notation)是一種輕量級(jí)的數(shù)據(jù)交換格式,屬于 JavaScript 語(yǔ)言的子集,于 2023 年被 Douglas Crockford 提出。ON 可以表示數(shù)字、布爾、字符串、對(duì)象、數(shù)組等基本類型數(shù)據(jù),也可以嵌套表示復(fù)雜數(shù)據(jù)結(jié)構(gòu),具有易讀、易解析、易于跨平臺(tái)等優(yōu)點(diǎn)。
二、在 Android 中使用 ON
Android 中有兩種主要方式使用 ON 數(shù)據(jù):一種是通過(guò) ONObject 和 ONArray 對(duì)象直接解析 ON 數(shù)據(jù);另一種是在數(shù)據(jù)庫(kù)中使用 TEXT 類型字段存儲(chǔ) ON 數(shù)據(jù),方便后續(xù)的讀取和操作。
1.解析 ON 數(shù)據(jù)
ONObject 和 ONArray 是 Android 平臺(tái)提供的兩個(gè)常用 ON 解析器類。ONObject 表示 ON 對(duì)象,可以通過(guò) get()/getString()/getBoolean() 等方法獲取屬性值,也可以通過(guò) put() 方法向?qū)ο笾刑砑訉傩裕籓NArray 表示 ON 數(shù)組,可以通過(guò) get()/getInt()/getString() 等方法獲取數(shù)組元素值。
示例代碼:
“`java
// 解析 ON 字符串
String jsonString = “{\”name\”:\”Tom\”,\”age\”:20,\”score\”:[80, 90, 95]}”;
ONObject json = new ONObject(jsonString);
String name = json.getString(“name”); // 獲取屬性值
int age = json.getInt(“age”);
ONArray scoreArray = json.getONArray(“score”);
int firstScore = scoreArray.getInt(0); // 獲取數(shù)組元素值
// 構(gòu)建 ON 對(duì)象
ONObject newJson = new ONObject();
newJson.put(“name”, “Tom”);
newJson.put(“age”, 20);
ONArray scoreArray = new ONArray();
scoreArray.put(80);
scoreArray.put(90);
scoreArray.put(95);
newJson.put(“score”, scoreArray);
String newJsonString = newJson.toString(); // “{\”name\”:\”Tom\”,\”age\”:20,\”score\”:[80,90,95]}”
“`
2.存儲(chǔ) ON 數(shù)據(jù)
在 Android 應(yīng)用的開發(fā)中,我們常常需要將一些動(dòng)態(tài)變化的數(shù)據(jù)存儲(chǔ)到本地,以便下次啟動(dòng)應(yīng)用時(shí)重新讀取。針對(duì)這種情況,我們可以通過(guò)將 ON 數(shù)據(jù)存儲(chǔ)到數(shù)據(jù)庫(kù) TEXT 類型字段中實(shí)現(xiàn)數(shù)據(jù)的持久化。
示例代碼:
“`java
// 創(chuàng)建數(shù)據(jù)庫(kù)表
db.execSQL(“CREATE TABLE IF NOT EXISTS person(_id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, address TEXT)”);
// 將 ON 數(shù)據(jù)插入到數(shù)據(jù)庫(kù)中
String jsonStr = “{\”name\”:\”Tom\”,\”address\”:\”New York\”}”;
ContentValues cv = new ContentValues();
cv.put(“name”, “Tom”);
cv.put(“address”, jsonStr);
db.insert(“person”, null, cv);
// 從數(shù)據(jù)庫(kù)中讀取 ON 數(shù)據(jù)
Cursor cursor = db.query(“person”, null, null, null, null, null, null);
if (cursor.moveToNext()) {
String json = cursor.getString(cursor.getColumnIndex(“address”));
ONObject jsonObject = new ONObject(json);
String name = jsonObject.getString(“name”);
String address = jsonObject.getString(“address”);
}
“`
三、ON 使用注意事項(xiàng)
1.ON 數(shù)據(jù)的格式應(yīng)該保證正確,否則可能會(huì)導(dǎo)致解析失敗或者數(shù)據(jù)存儲(chǔ)不完整。
2.ON 數(shù)據(jù)的字段名和類型應(yīng)該與數(shù)據(jù)庫(kù)表的列名和類型一一對(duì)應(yīng),否則可能會(huì)導(dǎo)致數(shù)據(jù)寫入或讀取出錯(cuò)。
3.ON 數(shù)據(jù)的大小應(yīng)該根據(jù)實(shí)際需要進(jìn)行控制,避免存儲(chǔ)過(guò)大的 ON 數(shù)據(jù)造成數(shù)據(jù)庫(kù)性能下降或者存儲(chǔ)失敗的情況。
四、結(jié)論
本文深入剖析了 Android 中使用 ON 的方法,包括 ON 數(shù)據(jù)的解析和存儲(chǔ)。對(duì)于需要頻繁讀取或者需要支持?jǐn)?shù)據(jù)持久化的數(shù)據(jù)來(lái)說(shuō),使用 ON 數(shù)據(jù)存儲(chǔ)方式是非常便捷和實(shí)用的。同時(shí),使用 ON 數(shù)據(jù)也需要注意數(shù)據(jù)格式、映射關(guān)系和數(shù)據(jù)大小等問(wèn)題,以確保數(shù)據(jù)的完整性和性能的可靠性。
相關(guān)問(wèn)題拓展閱讀:
- 求助android解析ON的問(wèn)題
- android json解析三種方式哪種效率更高
求助android解析ON的問(wèn)題
key是String類鉛滾型的,比如 “userId”,String類型的value要用雙引號(hào),int類型什么都不用,如:
{
“T1”:
{“BU_ID”:63,“BU_NAME”:“testBU”
{“BU_ID”槐戚余:61,“BU_NAME”仔殲:“Sunford”},
{“BU_ID”:62,“BU_NAME”:“ZXHTsss”},
{“BU_ID”:42,“BU_NAME”:“Conti1”},
{“BU_ID”:43,“BU_NAME”:“NewBU”}
>
}
android Json接收是采用的(key,value)這樣悉困肆形式,所以你傳輸或者是接收的時(shí)候也要這種格式
{“尺賀BU_ID”:61,”BU_NAME”:”Sunford”},
{“BU_ID”:62,”BU_NAME”:”ZXHTsss”},
{“BU_ID”:42,”BU_NAME”:”Conti1″},
{“BU_ID”:43,”BU_NAME”:”NewBU”}>
String str=”你接收的字符串”
JsonArray arry=new JsonArray( str);
然后在睜轎一個(gè)個(gè)的遍歷出來(lái)
for(int i=0;i
JsonObject obj=new JsonObject();
obj.getString(“BU_ID”);/ obj.getInt(“BU_ID”)
obj.getString(“BU_NAME”);
}
這是一個(gè)json格式驗(yàn)證御賣的鏈接,可以驗(yàn)證凳拆激自己寫的json格式是否正確棗襪
換成這樣格啟鏈卜式就對(duì)了:
{
‘T1’:
{
‘BU_ID’: ’63’,
‘BU_NAME’: ‘testBU’
}, {
‘BU_ID’: ’61’,
‘BU_NAME’: ‘Sunford’
}, {
‘BU_ID’: ’62’,
‘悄穗BU_NAME’: ‘ZXHTsss’
}, {
‘BU_ID’: ’42’,
‘BU_NAME’: ‘Conti1’
}, {
‘BU_ID’: ’43’,
‘喚差BU_NAME’: ‘NewBU’
}
>
}
android json解析三種方式哪種效率更高
用org.json以及谷歌提供gson來(lái)解析json數(shù)據(jù)的方式更好一些。
安卓下通常采用以下幾種方式解析json數(shù)據(jù):
1、org.json包(已經(jīng)集成到android.jar中了)
2、google提供的gson庫(kù)
3、阿里巴巴的fastjson庫(kù)
4、json-lib
以Google出品的Gson為例,具體步驟為:
1、首先,從 code.google.com/p/google-gson/downloads/list下載GsonAPI:
google-gson-1.7.1-release.zip 把gson-1.7.jar copy到libs(項(xiàng)目根目錄新建一個(gè)libs文件夾)中。 可以使用以下兩種方法解析ON數(shù)據(jù),通過(guò)獲取JsonReader對(duì)象解析ON數(shù)據(jù)。
代碼如下:
String jsonData = “”;
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對(duì)象獲取User對(duì)象數(shù)據(jù)進(jìn)行相應(yīng)的操作:
代碼如下:
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());
}
3、如果要處理的ON字符串只包含一個(gè)ON對(duì)象,則可以直接使用fromJson獲取一個(gè)User對(duì)象:
代碼如下:
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());
一、什么是ON?
ON是一種取代XML的數(shù)據(jù)結(jié)構(gòu),和xml相比,它更小巧但描述能力卻不差,由于它的小巧所以網(wǎng)絡(luò)傳輸數(shù)據(jù)將減少更多流量從而加快速度。
ON就是一串字符串 只不過(guò)元素會(huì)使用特定的符號(hào)標(biāo)注。
{} 雙括號(hào)表示對(duì)象
中括號(hào)表示數(shù)組
”” 雙引號(hào)內(nèi)是屬性或值
: 冒號(hào)表示后者是前者的值(這個(gè)值可以是字符串、數(shù)字、也可以是另一個(gè)數(shù)組或?qū)ο?
所以 {“name”: “Michael”} 可以理解為是一個(gè)包含name為Michael的對(duì)象
而就表示包含兩個(gè)對(duì)象的數(shù)組
當(dāng)然了,你也可以使用{“name”:}來(lái)簡(jiǎn)化上面一部,這是一個(gè)擁有一個(gè)name數(shù)組的對(duì)象
二、ON解析之傳統(tǒng)的ON解析
1、生成On字符串
public static String createJsonString(String key, Object value) {
ONObject jsonObject = new ONObject();
jsonObject.put(key, value);
return jsonObject.toString();
}
2、解析ON字符串
分為以下三種情況,一個(gè)JavaBean,一個(gè)List數(shù)組,一個(gè)嵌套Map的List數(shù)組:
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import org.json.ONArray;
import org.json.ONObject;
import com.android.myjson.domain.Person;
/**
* 完成對(duì)json數(shù)據(jù)的解析
*
*/
public class JsonTools {
public static Person getPerson(String key, String jsonString) {
Person person = new Person();
try {
ONObject jsonObject = new ONObject(jsonString);
ONObject personObject = jsonObject.getONObject(“person”);
person.setId(personObject.getInt(“id”));
person.setName(personObject.getString(“name”));
person.setAddress(personObject.getString(“address”));
} catch (Exception e) {
// TODO: handle exception
}
return person;
}
public static List getPersons(String key, String jsonString) {
List list = new ArrayList();
try {
ONObject jsonObject = new ONObject(jsonString);
// 返回json的數(shù)組
ONArray jsonArray = jsonObject.getONArray(key);
for (int i = 0; i listKeyMaps(String key,
String jsonString) {
List> list = new ArrayList>();
try {
ONObject jsonObject = new ONObject(jsonString);
ONArray jsonArray = jsonObject.getONArray(key);
for (int i = 0; i ,>三、ON解析之GSON
1、生成ON字符串
import com.google.gson.Gson;
public class JsonUtils {
public static String createJsonObject(Object obj) {
Gson gson = new Gson();
String str = gson.toJson(obj);
return str;
}
}二、解析ON
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
;
public class GsonTools {
public GsonTools() {
// TODO Auto-generated constructor stub
}
/**
* @param
* @param jsonString
* @param cls
* @return
*/
public static T getPerson(String jsonString, Class cls) {
T t = null;
try {
Gson gson = new Gson();
t = gson.fromJson(jsonString, cls);
} catch (Exception e) {
// TODO: handle exception
}
return t;
}
/**
* 使用Gson進(jìn)行解析 List
*
* @param
* @param jsonString
* @param cls
* @return
*/
public static List getPersons(String jsonString, Class cls) {
List list = new ArrayList();
try {
Gson gson = new Gson();
list = gson.fromJson(jsonString, new TypeToken>() {
}.getType());
} catch (Exception e) {
}
return list;
}
/**
* @param jsonString
* @return
*/
public static List getList(String jsonString) {
List list = new ArrayList();
try {
Gson gson = new Gson();
list = gson.fromJson(jsonString, new TypeToken>() {
}.getType());
} catch (Exception e) {
// TODO: handle exception
}
return list;
}
public static List> listKeyMaps(String jsonString) {
List> list = new ArrayList>();
try {
Gson gson = new Gson();
list = gson.fromJson(jsonString,
new TypeToken>>() {
}.getType());
} catch (Exception e) {
// TODO: handle exception
}
return list;
}
}
三、ON解析之FastON
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import com.alibaba.fastjson.ON;
import com.alibaba.fastjson.TypeReference;
public class JsonTool {
public static T getPerson(String jsonstring, Class cls) {
T t = null;
try {
t = ON.parseObject(jsonstring, cls);
} catch (Exception e) {
// TODO: handle exception
}
return t;
}
public static List getPersonList(String jsonstring, Class cls) {
List list = new ArrayList();
try {
list = ON.parseArray(jsonstring, cls);
} catch (Exception e) {
// TODO: handle exception
}
return list;
}
public static List> getPersonListMap1(
String jsonstring) {
List> list = new ArrayList>();
try {
list = ON.parseObject(jsonstring,
new TypeReference>>() {
}.getType());
} catch (Exception e) {
// TODO: handle exception
}
return list;
}
}
總結(jié):
ON對(duì)于移動(dòng)設(shè)備來(lái)說(shuō),尤其對(duì)于網(wǎng)絡(luò)環(huán)境較差和流量限制的情況下,相對(duì)于XML格式的數(shù)據(jù)傳輸會(huì)更節(jié)省流量,傳輸效率更高。在這三種解析方式中FastJson是效率更高的,推薦使用。
關(guān)于android 數(shù)據(jù)庫(kù) json的介紹到此就結(jié)束了,不知道你從中找到你需要的信息了嗎 ?如果你還想了解更多這方面的信息,記得收藏關(guān)注本站。
創(chuàng)新互聯(lián)服務(wù)器托管擁有成都T3+級(jí)標(biāo)準(zhǔn)機(jī)房資源,具備完善的安防設(shè)施、三線及BGP網(wǎng)絡(luò)接入帶寬達(dá)10T,機(jī)柜接入千兆交換機(jī),能夠有效保證服務(wù)器托管業(yè)務(wù)安全、可靠、穩(wěn)定、高效運(yùn)行;創(chuàng)新互聯(lián)專注于成都服務(wù)器托管租用十余年,得到成都等地區(qū)行業(yè)客戶的一致認(rèn)可。
當(dāng)前文章:深度剖析Android數(shù)據(jù)庫(kù)之ON使用方法(android數(shù)據(jù)庫(kù)json)
文章鏈接:http://www.5511xx.com/article/dpogdps.html


咨詢
建站咨詢
