android 封装解析json数据类型,android中的JSON解析

本文详细介绍了JSON的基本概念,比较了JSON与XML的区别,并重点讲解了Android中JSON解析库org.json的使用,包括JSONObject、JSONArray、JSONStringer等类的详细操作,以及如何构建和解析JSON文本。同时提供了示例代码展示创建和解析JSON对象的过程。
摘要由CSDN通过智能技术生成

一。什么是JSON:

1.JSON:Javascript Object Nation

2.JSON是一系列键值对的集合

3.JSON以经被大多数开发人员接受,在网络数据传输中应用相当广泛

4.JSON相对XML来说解析相对方便一些

二。JSON 与 XML 相比:

1.JSON和XML的数据可读性基本相同

2.JSON和XML同样拥有丰富的解析手段

3.JSON相对于XML来讲,数据的体积小

4.JSON与JavaScript的交互更加方便

5.JSON对数据的描述性比XML较差

6.JSON的速度要远远快于XML

三。android2.3提供的json解析类android的json解析部分都在包org.json下,主要有以下几个类:JSONObject:

(1)可以看作是一个json对象,这是系统中有关JSON定义的基本单元,其包含一对儿(Key/Value)数值。

(2)它对外部应用toString()方法输出的数值,对于内部引用内部的put()方法添加数值:new JSONObject().put("JSON", "Hello, World!")。

(3)Value的类型包括:Boolean、JSONArray、JSONObject、Number、String或者默认值JSONObject.NULL object 。JSONStringer:

(1)json文本构建类 ,根据官方的解释,这个类可以帮助快速和便捷的创建JSON text。

(2)每个JSONStringer实体只能对应创建一个JSON text。

(3)其最大的优点在于可以减少由于格式的错误导致程序异常,引用这个类可以自动严格按照JSON语法规则(syntax rules)创建JSON text。

(4)使用时注意object与endObject的配对、array与endArray的配对使用。JSONArray:

(1)它代表一组有序的数值。

(2)get()和opt()两种方法都可以通过index索引返回指定的数值。

(3)put()方法用来添加或者替换数值。

(4)同样这个类的value类型可以包括:Boolean、JSONArray、JSONObject、Number、String或者默认值JSONObject.NULL object。JSONTokener:json解析类JSONException:json中用到的异常

四。构建文本的两种方法

(1)JSONObject, JSONArray来构建json文本:

要构建的JSON文本的例子如下:

{

{

"学号":"20101111",

"姓名":"张菲",

"成绩":

{

"java":"90","android":"92"

},

"电话":["13725986596","18852663636"],

"注册":true,

"历届成绩":

{

"2010":{"高数":"88","大物":"85","C语言":"90"},

"2011":{"C++":"95","算法":"89"}

}

}

}

java代码如下:/*

* 用JSONObject和JSONArray创建Json文档

*/

public static String createJSON1() {

JSONObject student = new JSONObject();

try {

//添加的值为字符串

student.put("学号", "20101111");

student.put("姓名", "张非");

//添加的值为对象

JSONObject grade=new JSONObject();

grade.put("java", "90");

grade.put("android", "92");

student.put("成绩", grade);

//添加的值为数组

JSONArray phone=new JSONArray();

phone.put("13725986596").put("18852663636");

student.put("电话", phone);

//添加的值为布尔

student.put("注册", true);

//添加的值为map

JSONObject allYearGrade=new JSONObject();

Map map1=new HashMap();

Map map2=new HashMap();

map1.put("高数", "88");

map1.put("大物", "85");

map1.put("c语言", "90");

map2.put("c++", "95");

map2.put("算法", "89");

allYearGrade.put("2010", map1);

allYearGrade.put("2011", map2);

student.put("历届成绩", allYearGrade);

//打印测试

System.out.println(student.toString());

} catch (JSONException e) {

e.printStackTrace();

}

return student.toString();

}

看一下输出结果:

{

"成绩":{"android":"92","java":"90"},

"电话":["13725986596","18852663636"],

"学号":"20101111","姓名":"张非",

"注册":true,

"历届成绩":{

"2011":{"c++":"95","算法":"89"},

"2010":{"c语言":"90","大物":"85","高数":"88"}

}

}

(2)还可以使用JSONStringer来构建json文本

代码如下:/*

* 用JSONStringer的方法创建Json文档

*/

public static String createJSON2(){

JSONStringer student =new JSONStringer();

try {

//整体的对象student

student.object();

//各个String类型的添加

student.key("学号");

student.value("20102222");

student.key("姓名");

student.value("王剑");

//子对象的添加,注意object()与endObject()成对出现

student.key("成绩");

student.object();

student.key("java");

student.value("88");

student.key("android");

student.value("96");

student.endObject();

//数组的添加,注意array()与endArray()成对出现

student.key("电话");

student.array();

student.value("13955554444").value("18736992588");

student.endArray();

//布尔值得添加

student.key("注册");

student.value(false);

//结束整个对象student

student.endObject();

//打印测试

System.out.println(student.toString());

} catch (JSONException e) {

e.printStackTrace();

}

return student.toString();

}

测试结果如下:{

"学号":"20102222",

"姓名":"王剑",

"成绩":{"java":"88","android":"96"},

"电话":["13955554444","18736992588"],

"注册":false

}

(3)json文本解析

代码如下:

/*

* json的解析

*/

public static void parseJSON(String strJSON){

try {

JSONObject student=new JSONObject(strJSON);

String id=student.getString("学号");

String name=student.getString("姓名");

JSONObject grade=student.getJSONObject("成绩");

JSONArray phone=student.getJSONArray("电话");

boolean login=student.getBoolean("注册");

System.out.println(id+" "+name+" "+grade.toString()+" "+phone.toString()+" "+login);

} catch (JSONException e) {

e.printStackTrace();

}

}

测试结果如下:20102222 王剑 {"android":"96","java":"88"} ["13955554444","18736992588"] false

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值