JSON學習筆記

2021-07-31 10:29:30 字數 3615 閱讀 6778

最近在做乙個網路請求的demo,用到了json,做一次總結。

一、json基礎知識點?

json是一種取代xml的資料結構,和xml相比,它更小巧但描述能力卻不差,由於它的小巧所以網路傳輸資料將減少更多流量從而加快速度。

json就是一串字串 只不過元素會使用特定的符號標註。

{} 雙括號表示物件

中括號表示陣列

」 」 雙引號內是屬性或值

冒號表示後者是前者的值(這個值可以是字串、數字、也可以是另乙個陣列或物件)

二、json解析

第乙個 「size」 鍵的值為 9.5,由此可以判斷出 該值屬於數值型別,因為值周圍沒有引號。

第二個 「wide」 鍵的值為 true,不帶引號。這 表示該值屬於布林值。如果數字周圍有引號,則表示其為字串。也就是我們在第三個鍵值對中找到的字串。

第三個 「country-of-origin」鍵的值為 「usa」。

第四個鍵是 「style」,其值表示為物件,因為兩側有大括號。

在 style 物件內部,我們可以找到兩個巢狀鍵/值對:乙個為 catergories,乙個為color。其實 catergories 的值是乙個陣列,「boot」 和 「winklepicker」被包含在中括號內組成乙個陣列。 按照這種方式,通過使用物件和陣列,可以巢狀幾組值, 隨後便可在這些容器中放入不同的資料型別。

如果我們請求的資料很多比如這個url;

我們就需要json整理格式化,推薦乙個格式**

通過這個demo,先說明一下這個demo是在給定的 json ,下面的string中就是我們

需要解析的json

通過上面給的json格式工具,我們做一些操作取出 「features」物件中的一些值。

便於理解貼一張圖吧

下面的**只是貼出必要的資料,方便需要執行看效果的同學直接拿來用

demo:

string部分參考,因為csdn支援markdown不是特別好

//建立乙個json物件,並傳入json格式的資料

jsonobject root = new jsonobject(sample_json_response);

//獲取陣列物件「features」 從圖中可以看出「features」後面是中括號

jsonarray featurearray=root.getjsonarray("features");

//這個迴圈只是獲取每個陣列中相同的物件

for(int i=0;i//獲取第 i 個陣列中的資料

jsonobject earthquake= featurearray.getjsonobject(i);

//獲取該物件中的「properties」json物件

jsonobject properties=earthquake.getjsonobject("properties");

//獲取鍵為「mag」的值

double mag= properties.getdouble("mag");

//獲取鍵為「place」的值

string place= properties.getstring("place");

//獲取鍵為「time」的值

long time= long.valueof(properties.getstring("time"));

上面獲取出來的值可有用 log 或者 toast 顯示出來

四、json 資料中時間格式的轉換

可以看出來 json 中 「time」 鍵值為毫秒數,我們便於**需要轉換為我們熟悉的格式,所以我們用到了******dateformat類,基本格式是:

//引號中的格式參照下圖

******dateformat dateformat=

new ******dateformat ("yyyy-mm-dd");

date

date

=new

date(time); //time為獲取到的毫秒數

string showdate=dateformat.format(date);

//用 log 或者 toast 顯示出來

如果要處理數值的格式我們用decimalformat類,用法很簡單,如:

//「0」表示站位,下面的意思表示只保留一位小數

//當然我們可以使用math類也能達到保留一位小數

decimalformat decimalformat=new decimalformat("0.0");

更詳細的可以檢視 decimalformat 格式方法,裡面也有格式圖,方便理解;

五、字串的操控

你也可以參閱文件中的charsequence。charsequence 是一組字元,字串是一種更具體的 charsequence (string 類是 charsequence 類的 擴充套件類)。如果某個方法要求使用 charsequence 作為輸入,你可以 傳遞乙個字串。 以下是一些可以在 string 物件上呼叫的其他方法:

length() - 返回字串中的 字元數

contains(charsequence cs) - 根據 原始字串中是否包含輸入 charsequence (或輸入 string)返回 true 或 false

indexof(string string) - 返回輸入 string 首次在原始 string 中出現的位置的索引,如果 原始 string 中不存在輸入 string,則返回 -1

split(string string) - 根據輸入 string 中 指定的位置對原始 string 進行拆分, 並返回包含拆分後 string 部分的陣列。

substring(int start, int end) - 返回 乙個新的 string,該 string 為從開始索引到結束索引 之間的內容(包括開始索引但不包括結束索引)。

demo

demo 中,我們需要拆分「place」 中的資料,其中以「of」為劃分

//說明一下mdata.getlocation()是adpater中獲取的具體的「place」資料

string show=null;

//獲取出現「of」的索引值

int indexof=mdata.getlocation().indexof("of");

//如果資料報含「of」

if(mdata.getlocation().contains("of"))else

//設定顯示的文字

textview mlocation=(textview)findviewbyid(r.id.);

mlocation.settext(show);

更多的操作需要具體要求修改,答案不唯一,有興趣可以把其他的幾個方法的嘗試一下

Json學習筆記

json基本語法 json資料結構 事例 using litjson using system using system.collections.generic using system.io namespace jsonstudy using system using system.collect...

JSON學習筆記

目錄python中json標準庫的作用 資料型別的轉換 python json dict object list,tuple array strstring int,float,int float dereived enums number true true false false none nu...

Json學習筆記

json模組為序列化和反序列化模組,通過json,可以將列表 無序字典轉換成字串形式,從而實現序列化。同時可以將字串反序列化成列表 字典。這兩種轉換分別對應的是json.dumps 和json.loads 有一點值得注意的是,python以外的其他語言,基本上都是將雙引號中的內容作為字串看待,只有p...