當前位置:首頁 > 嵌入式 > 嵌入式軟件
[導讀] JSON與XML一樣都是數(shù)據(jù)格式,JSON的數(shù)據(jù)格式比XML更小。這里主講JSON。JSON是JavsScript對象符號。下面是一個簡單的JSON格式{"name":"zhangsan","age":22,"address":"太原

 JSON與XML一樣都是數(shù)據(jù)格式,JSON的數(shù)據(jù)格式比XML更小。這里主講JSON。

JSON是JavsScript對象符號。

下面是一個簡單的JSON格式

{"name":"zhangsan","age":22,"address":"太原"}

這就是一個對象,里面的值key是冒號前面的類容,value是冒號后面的類容。

JSON還可以有數(shù)組的形式,如下:

[{"name":"zhangsan","age":22,"address":"太原"},

{"name":"lisi","age":20,"address":"黃岡"},

{"name":"wangwu","age":21,"address":"武漢"}]

在中括號里全都是對象,這種對象的個數(shù)沒限制,對象里是鍵值對。

在JSON對象中還可以有對象,如下:

{

"name":"zhangsan","age":22,

"address":{"country":"中國","province":"山西","city":"太原"}

}

這就是說address key是一個對象。

這就是JSON的基本形式。

首先下載解析JSON需要的Jar包 下載。這是Google提供解析JSON的開源的Json Jar包。

1.最基礎的解析

這種解析式最普遍的,根據(jù)JSON的格式來解析,我來解析如下的JSON數(shù)據(jù):

{"name":"zhangsan","age":22,"address":"太原"}

首先

String s="{"name":"zhangsan","age":22,"address":"太原"}";

這里使用反斜杠來使用雙引號。

JsonReader reader=new JsonReader(new StringReader(s));

聲明一個JsonReader對象,將String s傳入。

try {

JsonReader reader=new JsonReader(new StringReader(data));

reader.beginObject();

while(reader.hasNext())

{

String key=reader.nextName();

if("name".equals(key))

{

System.out.println(reader.nextString());

}

if("age".equals(key))

{

System.out.println(reader.nextInt());

}

if("address".equals(key))

{

System.out.println(reader.nextString());

}

}

reader.endObject();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

結(jié)果如下:

開始解析的時候調(diào)用reader.beginObject();結(jié)束的時候調(diào)用reader.endObject().應為一個對象里可能有很多的鍵值對,所以要使用while循環(huán),當對象里的鍵值對都循環(huán)完了的話reader.hasNext()方法返回false。reader.nextXXX()獲得你所要的值,XXX為類型。

2.解析數(shù)組

下面解析如下的Json數(shù)據(jù):

[{"name":"zhangsan","age":22,"address":"太原"},

{"name":"lisi","age":20,"address":"黃岡"},

{"name":"wangwu","age":21,"address":"武漢"}]

如下代碼:

try {

JsonReader reader=new JsonReader(new StringReader(data));

reader.beginArray();

while(reader.hasNext())

{

reader.beginObject();

while(reader.hasNext())

{

String key=reader.nextName();

if("name".equals(key))

{

System.out.println(reader.nextString());

}

if("age".equals(key))

{

System.out.println(reader.nextInt());

}

if("address".equals(key))

{

System.out.println(reader.nextString());

}

}

reader.endObject();

}

reader.endArray();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

根據(jù)這個Json的數(shù)據(jù)結(jié)構(gòu),我先解析數(shù)組,所以開始就reader.beginArray();當然還要reader.endArray();同樣使用reader.hasNext()來判斷數(shù)組是否都解析完了。

下面是效果圖:

3.包含對象的對象解析

下面我解析如下的Json數(shù)據(jù):

{

"name":"zhangsan","age":22,

"address":{"country":"中國","province":"山西","city":"太原"}

}

廢話不多說先來代碼:

try {

JsonReader reader=new JsonReader(new StringReader(data));

reader.beginObject();

while(reader.hasNext())

{

String key=reader.nextName();

if("name".equals(key))

{

System.out.println(reader.nextString());

}

if("address".equals(key))

{

reader.beginObject();

while(reader.hasNext())

{

String theKey=reader.nextName();[!--empirenews.page--]

if("country".equals(theKey))

{

System.out.println(reader.nextString());

}

if("province".equals(theKey))

{

System.out.println(reader.nextString());

}

if("city".equals(theKey))

{

System.out.println(reader.nextString());

}

}

reader.endObject();

}

}

reader.endObject();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

都給解析出來了。

1.解析一個對象

可以直接從Json中將隊形解析出來,這個Json必須是一個Json對象,如下:

{"name":"zhangsan","age":22,"address":"太原"}

它只是一個對象。

我新建一個類,生成get和set方法,如下:

package com.zhycheng;

publicclass Human {

String name,address;

int age;

public String getName() {

return name;

}

publicvoid setName(String name) {

this.name = name;

}

publicint getAge() {

return age;

}

publicvoid setAge(int age) {

this.age = age;

}

public String getAddress() {

return address;

}

publicvoid setAddress(String address) {

this.address = address;

}

}

然后使用如下代碼直接解析

String s="{"name":"zhangsan","age":22,"address":"太原"}";

Gson g=new Gson();

Human h=g.fromJson(s, Human.class);

System.out.println(h.getName()+";"+h.getAge()+";"+h.getAddress());

2.解析數(shù)組

下面解析如下的Json數(shù)據(jù):

[{"name":"zhangsan","age":22,"address":"太原"},

{"name":"lisi","age":20,"address":"黃岡"},

{"name":"wangwu","age":21,"address":"武漢"}]

代碼如下:

String s="[{"name":"zhangsan","age":22,"address":"太原"},{"name":"lisi","age":20,"address":"黃岡"},{"name":"wangwu","age":21,"address":"武漢"}]";

Type type=new TypeToken>(){}.getType();

Gson g=new Gson();

LinkedList ll=g.fromJson(s, type);

for(int i=0;i

{

Human h=(Human)ll.get(i);

System.out.println(h.getName()+","+h.getAge()+","+h.getAddress());

}

在這里要注意:

1.Json里的數(shù)據(jù)時數(shù)組,數(shù)組里是對象

2.泛形一定要用,否則出錯

項目工程下載。

本站聲明: 本文章由作者或相關機構(gòu)授權發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫毥谦F公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數(shù)字化轉(zhuǎn)型技術解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關鍵字: AWS AN BSP 數(shù)字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時1.5...

關鍵字: 汽車 人工智能 智能驅(qū)動 BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務能7×24不間斷運行,同時企業(yè)卻面臨越來越多業(yè)務中斷的風險,如企業(yè)系統(tǒng)復雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務連續(xù)性,提升韌性,成...

關鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報道,騰訊和網(wǎng)易近期正在縮減他們對日本游戲市場的投資。

關鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關鍵字: 華為 12nm EDA 半導體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會上,華為常務董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權最終是由生態(tài)的繁榮決定的。

關鍵字: 華為 12nm 手機 衛(wèi)星通信

要點: 有效應對環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實提質(zhì)增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務引領增長 以科技創(chuàng)新為引領,提升企業(yè)核心競爭力 堅持高質(zhì)量發(fā)展策略,塑強核心競爭優(yōu)勢...

關鍵字: 通信 BSP 電信運營商 數(shù)字經(jīng)濟

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺與中國電影電視技術學會聯(lián)合牽頭組建的NVI技術創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會上宣布正式成立。 活動現(xiàn)場 NVI技術創(chuàng)新聯(lián)...

關鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會上,軟通動力信息技術(集團)股份有限公司(以下簡稱"軟通動力")與長三角投資(上海)有限...

關鍵字: BSP 信息技術
關閉
關閉