android解析json

android2.3提供的json解析類?
android的json解析部分都在包org.json下,主要有以下幾個類:?
JSONObject:可以看作是一個json對象?
JSONStringer:json文本構建類?
JSONArray:可以看作是json的數組?
JSONTokener:json解析類?
JSONException:json中用到的異常?

JSONObject, JSONArray來構建json文本?

// 假設現在要創建這樣一個json文本
//    {
//        "phone" : ["12345678", "87654321"], // 數組
//        "name" : "yuanzhifei89", // 字符串
//        "age" : 100, // 數值
//        "address" : { "country" : "china", "province" : "jiangsu" }, // 對象
//        "married" : false // 布爾值
//    }try {// 首先最外層是{},是創建一個對象JSONObject person = new JSONObject();// 第一個鍵phone的值是數組,所以需要創建數組對象JSONArray phone = new JSONArray();phone.put("12345678").put("87654321");person.put("phone", phone);person.put("name", "yuanzhifei89");person.put("age", 100);// 鍵address的值是對象,所以又要創建一個對象JSONObject address = new JSONObject();address.put("country", "china");address.put("province", "jiangsu");person.put("address", address);person.put("married", false);
} catch (JSONException ex) {// 鍵為null或使用json不支持的數字格式(NaN, infinities)throw new RuntimeException(ex);
}

getType和optType api的使用?
getType可以將要獲取的鍵的值轉換為指定的類型,如果無法轉換或沒有值則拋出JSONException?
optType也是將要獲取的鍵的值轉換為指定的類型,無法轉換或沒有值時返回用戶提供或這默認提供的值?

try {// 所有使用的對象都是用上面創建的對象// 將第一個電話號碼轉換為數值和將名字轉換為數值phone.getLong(0);person.getLong("name"); // 會拋異常,因為名字無法轉換為long
    phone.optLong(0); // 代碼內置的默認值phone.optLong(0, 1000); // 用戶提供的默認值person.optLong("name");person.optLong("name", 1000); // 不像上面那樣拋異常,而是返回1000
} catch (JSONException ex) {// 異常處理代碼
}

除了上面的兩個類,還可以使用JSONStringer來構建json文本

try {JSONStringer jsonText = new JSONStringer();// 首先是{,對象開始。object和endObject必須配對使用
    jsonText.object();jsonText.key("phone");// 鍵phone的值是數組。array和endArray必須配對使用
    jsonText.array();jsonText.value("12345678").value("87654321");jsonText.endArray();jsonText.key("name");jsonText.value("yuanzhifei89");jsonText.key("age");jsonText.value(100);jsonText.key("address");// 鍵address的值是對象
    jsonText.object();jsonText.key("country");jsonText.value("china");jsonText.key("province");jsonText.value("jiangsu");jsonText.endObject();jsonText.key("married");jsonText.value(false);// },對象結束
    jsonText.endObject();
} catch (JSONException ex) {throw new RuntimeException(ex);
}

json文本解析類JSONTokener?
按照RFC4627規范將json文本解析為相應的對象。?

對于將json文本解析為對象,只需要用到該類的兩個api:?
構造函數?
public Object nextValue();?

//    {
//        "phone" : ["12345678", "87654321"], // 數組
//        "name" : "yuanzhifei89", // 字符串
//        "age" : 100, // 數值
//        "address" : { "country" : "china", "province" : "jiangsu" }, // 對象
//        "married" : false // 布爾值
//    }private static final String JSON = 
"{" +"    \"phone\" : [\"12345678\", \"87654321\"]," +"    \"name\" : \"yuanzhifei89\"," +"    \"age\" : 100," +"    \"address\" : { \"country\" : \"china\", \"province\" : \"jiangsu\" }," +"    \"married\" : false," +
"}";try {JSONTokener jsonParser = new JSONTokener(JSON);// 此時還未讀取任何json文本,直接讀取就是一個JSONObject對象。// 如果此時的讀取位置在"name" : 了,那么nextValue就是"yuanzhifei89"(String)JSONObject person = (JSONObject) jsonParser.nextValue();// 接下來的就是JSON對象的操作了person.getJSONArray("phone");person.getString("name");person.getInt("age");person.getJSONObject("address");person.getBoolean("married");
} catch (JSONException ex) {// 異常處理代碼
}

其它的api基本就是用來查看json文本中的文本的

try {JSONTokener jsonParser = new JSONTokener(JSON);// 繼續向下讀8個json文本中的字符。此時剛開始,即在{處jsonParser.next(8); //{    "phone。tab算一個字符// 繼續向下讀1個json文本中的字符jsonParser.next(); //"// 繼續向下讀取一個json文本中的字符。該字符不是空白、同時也不是注視中的字符jsonParser.nextClean(); //:// 返回當前的讀取位置到第一次遇到'a'之間的字符串(不包括a)。jsonParser.nextString('a'); //  ["12345678", "87654321"],    "n(前面有兩個空格)// 返回當前讀取位置到第一次遇到字符串中(如"0089")任意字符之間的字符串,同時該字符是trimmed的。(此處就是第一次遇到了89)jsonParser.nextTo("0089"); //me" : "yuanzhifei// 讀取位置撤銷一個
    jsonParser.back();jsonParser.next(); //i// 讀取位置前進到指定字符串處(包括字符串)jsonParser.skipPast("address");jsonParser.next(8); //" : { "c// 讀取位置前進到執行字符處(不包括字符)jsonParser.skipTo('m');jsonParser.next(8); //married"
} catch (JSONException ex) {// 異常處理代碼
}

json中的null和java中的null注意:?

// json對象的成員為null可能有兩種情況:
// 1: 不出現該成員的名稱(對應java中的null)
// 2: 成員值為null。(對應java中的JSONObject.NULL)// 完整的Json
//  {  
//      "phone" : ["12345678", "87654321"], // 數組  
//      "name" : "yuanzhifei89", // 字符串  
//      "age" : 100, // 數值  
//      "address" : { "country" : "china", "province" : "jiangsu" }, // 對象  
//      "married" : false // 布爾值  
//  }  // 第一種情況:不出現某成員的名稱(address)
String jsonText = "{" +  "   \"phone\" : [\"12345678\", \"87654321\"]," +  "   \"name\" : \"yuanzhifei89\"," +  "   \"age\" : 100," +  "   \"married\" : false," +  
"}"; try {JSONTokener t = new JSONTokener(jsonText);JSONObject obj = (JSONObject) t.nextValue();if (obj.optJSONObject("address") == null || obj.isNull("address")) {}
} catch (JSONException ex) {ex.printStackTrace();
}// 第二種情況:成員值為null(address為null)
String jsonText = "{" +  "   \"phone\" : [\"12345678\", \"87654321\"]," +  "   \"name\" : \"yuanzhifei89\"," +  "   \"age\" : 100," +  "   \"address\" : null," +  "   \"married\" : false," +  
"}"; 
try {JSONTokener t = new JSONTokener(jsonText);JSONObject obj = (JSONObject) t.nextValue();// 應該這樣判斷json是否為nullif (obj.get("address") == JSONObject.NULL || obj.isNull("address")) {}
} catch (JSONException ex) {ex.printStackTrace();
}

json中的對象不存在和java中的對應關系

json中的null對應java中的JSONObject.NULL,所以jsonObj.put("key", JSONObject.NULL) 相當于{"key" : null}json中的不出現某成員對應Java中的null,所以jsonObj.put("key", null)相當于刪除該成員,即:{}

遍歷JSONArray對象

JSONArray person = (JSONArray) jsonParser.nextValue();
// 接下來的就是JSON對象的操作了
for (int i = 0; i < person.length(); i++) {
String a0 = person.getJSONObject(i).getString("ID");}

轉載于:https://www.cnblogs.com/jake-ge/p/4721506.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/397693.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/397693.shtml
英文地址,請注明出處:http://en.pswp.cn/news/397693.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

MVVM模式于MVP模式

MVC、MVP、MVVM這些模式是為了解決開發過程中的實際問題而提出來的&#xff0c;目前作為主流的幾種架構模式而被廣泛使用。 一.MVP模式(Model-View-Presenter):傳統的開發是MVP模式(例如jquery) MVP是把MVC中的Controller換成了Presenter&#xff08;呈現&#xff09;&#xff…

HUNAN 11560 Yangyang loves AC(二分+貪心)

http://acm.hunnu.edu.cn/online/?actionproblem&typeshow&id11560&courseid0 題意&#xff1a;總共有n天,每天yangyang都需要一個快樂值,有m個隊友,每個隊友都會給陽陽一個快樂值(為2的冪),并且只能給一次,如果某一天隊友給的快樂值達到yangyang需要的快樂值那么…

BrowserSync開發利器

2019獨角獸企業重金招聘Python工程師標準>>> 大大節省開發時間。安裝使用簡單。使用步驟&#xff1a; 1、nodejs環境 安裝 2、在項目中使用npm安裝到本項目 3、對要監聽的文件執行響應命令 官網更詳細&#xff1a;http://www.browsersync.cn/#install 原理&#xf…

python字符串解析_Python-字符串解析-正則-re

正則表達式特殊字符序列&#xff0c;匹配檢索和替換文本普通字符 特殊字符 數量&#xff0c;普通字符用來定邊界更改字符思路字符串函數 > 正則 > for循環元字符  匹配一個字符# 元字符大寫&#xff0c;一般都是取小寫的反1. 0~9 整數          \d    …

algorithm -- 選擇排序

選擇排序是《導論》第一章課后習題&#xff0c;仿照插入排序&#xff0c;再次運用循環不變式來證明下算法的正確性&#xff0c;C 源碼&#xff1a; // 交換函數 void swap( int& a, int& b ) {a a^b;b a^b;a a^b; } void selectSort( int *arr, int count ) {if( a…

OD 完美走位

題目描述&#xff1a; 在第一人稱射擊游戲中&#xff0c;玩家通過鍵盤的A、S、D、W四個按鍵控制游戲人物分別向左、向后、向右、向前進行移動&#xff0c;從而完成走位。假設玩家每按動一次鍵盤&#xff0c;游戲人物會向某個方向移動一步&#xff0c;如果玩家在操作一定次數的鍵…

layui upload 后臺獲取不到值

后臺獲取不到值方法一&#xff1a; <script>layui.use(upload, function () {var upload layui.upload;//執行實例var uploadInst upload.render({elem: #test1 //綁定元素, url: /Home/UploadFiles //上傳接口, field: "fileNames" //添加這個屬性與后臺…

ueeditor無法上傳圖片_百度ue文本編輯器開發中無法上傳圖片

第一次發文&#xff0c;好緊張呀&#xff0c;不知道會不會沒人看。之前用ue遇到了一些坑&#xff0c;沒人看就當自己記錄了筆記。第一次用&#xff0c;總是會遇到問題&#xff0c;可以先查看下百度ue的演示http://ueditor.baidu.com/website/onlinedemo.html和API http://fex.b…

SQL 語句優化--IN語句優化案例

為什么80%的碼農都做不了架構師&#xff1f;>>> 今天客戶系統升級&#xff0c;通過DMVs性能分析查了一下&#xff0c;升級后發現一個語句執行時間比較長&#xff0c;執行語句要好幾秒鐘&#xff0c;調出語句如下&#xff1a; select distinct field003 from ufi2j0…

Activity跳轉

本例中MainActivity為&#xff1a;FirstActivity.java FirstActivity如下&#xff1a; package com.wyl.intentmultiactivitytest;import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.view.Vie…

Java課程設計---項目數據庫設計(含實體類)

1、數據庫分析設計 將數據庫命名為&#xff1a;db_student 分析系統中各角色之間的關系 2、表設計 &#xff08;1&#xff09;新建表tb_student&#xff08;學生表&#xff09; &#xff08;2&#xff09;新建表tb_admin&#xff08;管理員表&#xff09; &#xff08;3&#x…

java)_Java NIO系列教程(一) Java NIO 概述

原文鏈接 作者&#xff1a;Jakob Jenkov 譯者&#xff1a;airu 校對&#xff1a;丁一Java NIO 由以下幾個核心部分組成&#xff1a;ChannelsBuffersSelectors雖然Java NIO 中除此之外還有很多類和組件&#xff0c;但在我看來&#xff0c;Channel&#xff0c;Buffer…

本地讀取服務器Xml文件及本地讀本地的xml

updateUrl"ServerUrl"(服務器路徑) WebClient wc new WebClient(); Stream stream wc.OpenRead(updateUrl); XmlDocument xmlDoc new XmlDocument(); xmlDoc.Load(stream); XmlNode list xmlDoc.SelectSingleNode("Update"); foreach (XmlNode node in…

Context.getExternalFilesDir()和Context.getExternalCacheDir()方法

2019獨角獸企業重金招聘Python工程師標準>>> Context.getExternalCacheDir()方法可以獲取到 SDCard/Android/data/你的應用包名/cache/目錄&#xff0c;一般存放臨時緩存數據如果使用上面的方法&#xff0c;當你的應用在被用戶卸載后&#xff0c;SDCard/Android/dat…

java 靜態代碼塊_JAVA靜態代碼塊

今天遇到下面的代碼&#xff0c;感覺很奇怪&#xff0c;特意記錄下&#xff1a;代碼如下&#xff1a;public class Test {private static List objs new ArrayList();static {objs.add(new Test(Test.S_NAME,Test.NAME,Test.COUNT));objs.add(new Test(Test.S_NAME,Test.NAME,…

context詳解

1、Context概念&#xff1a; Context&#xff0c;相信不管是第一天開發Android&#xff0c;還是開發Android的各種老鳥&#xff0c;對于Context的使用一定不陌生~~你在加載資源、啟動一個新的Activity、獲取系統服務、獲取內部文件&#xff08;夾&#xff09;路徑、創建View操作…

Unity Camera的兩種模式

http://www.cnblogs.com/zhaoqingqing/p/3302484.html

mysql之group_concat函數

mysql之group_concat函數 在介紹GROUP_CONCAT之前&#xff0c;我們先來看看concat()函數和concat_ws()函數。 先準備一個測試數據庫&#xff1a; mysql> select * from scores; --------------------- | id | name | score | --------------------- | 1 | zhangsan | 1…

java 圖片批量上傳_java實現批量上傳圖片,還要保證每個圖片的順序號,疑問求教!...

rt我要一次性同時上傳n張照片&#xff0c;并且每張照片的順序號還不一樣&#xff0c;第一張的serialno是1&#xff0c;第二張是2。。一開始我做單張圖片上傳&#xff0c;代碼如下RequestMapping("/picUpLoad")ResponseBodypublic Map picUpLoad(MultipartFile file, …

linux 用戶創建、管理、權限分配

&#xff08;1&#xff09;su與sudo su:通過su可以在用戶之間切換&#xff0c;如果超級權限用戶root向普通或虛擬用戶切換不需要密碼&#xff0c;什么是權力&#xff1f;這就是&#xff01;而普通用戶切換到其它任何用戶都需要密碼驗證&#xff1b; sudo: sudo扮演的角色注定了…