- 浏览: 632252 次
- 性别:
- 来自: 苏州
文章分类
最新评论
-
laj12347:
楼主太给力了
Eclipse设置、调优、使用 -
kunlyy:
楼主太给力了
Eclipse设置、调优、使用 -
knight_black_bob:
mark ~
Eclipse设置、调优、使用 -
hujunxiang:
好全好全~~~
Eclipse设置、调优、使用 -
bugyun:
楼主辛苦了
Eclipse设置、调优、使用
json相关参考
json规范rfc4627:http://www.ietf.org/rfc/rfc4627.txt
json介绍:http://www.json.org/json-zh.html
json入门参考:http://www.cnblogs.com/Truly/archive/2006/12/31/608896.html
android2.3提供的json解析类
android的json解析部分都在包org.json下,主要有以下几个类:
JSONObject:可以看作是一个json对象
JSONStringer:json文本构建类
JSONArray:可以看作是json的数组
JSONTokener:json解析类
JSONException:json中用到的异常
JSONObject, JSONArray来构建json文本
getType和optType api的使用
getType可以将要获取的键的值转换为指定的类型,如果无法转换或没有值则抛出JSONException
optType也是将要获取的键的值转换为指定的类型,无法转换或没有值时返回用户提供或这默认提供的值
除了上面的两个类,还可以使用JSONStringer来构建json文本
json文本解析类JSONTokener
按照RFC4627规范将json文本解析为相应的对象。
对于将json文本解析为对象,只需要用到该类的两个api:
构造函数
public Object nextValue();
其它的api基本就是用来查看json文本中的文本的
json中的null和java中的null注意:
json中的对象不存在和java中的对应关系
json规范rfc4627:http://www.ietf.org/rfc/rfc4627.txt
json介绍:http://www.json.org/json-zh.html
json入门参考:http://www.cnblogs.com/Truly/archive/2006/12/31/608896.html
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是否为null if (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)相当于删除该成员,即:{}
评论
10 楼
tonytony3
2014-07-31
JsonReader reader = new JsonReader(new StringReader(strResult));
List<Bulletin> bulletins = new ArrayList<Bulletin>();
try {
reader.beginArray(); /* 开始解析数组 */
while (reader.hasNext()) {
reader.beginObject(); /* 开始解析对象 */
Bulletin b = new Bulletin();
while (reader.hasNext()) {
String tagName = reader.nextName(); /* 得到键值对中的key */
if (tagName.equals("Subject")) {
b.setSubject(reader.nextString());
}else if (tagName.equals("Suffix"))
{
b.setSuffix(reader.nextString());
}
}
// System.out.println(b);
bulletins.add(b);
reader.endObject();
}
reader.endArray();
} catch (IOException e) {
e.printStackTrace();
}
List<Bulletin> bulletins = new ArrayList<Bulletin>();
try {
reader.beginArray(); /* 开始解析数组 */
while (reader.hasNext()) {
reader.beginObject(); /* 开始解析对象 */
Bulletin b = new Bulletin();
while (reader.hasNext()) {
String tagName = reader.nextName(); /* 得到键值对中的key */
if (tagName.equals("Subject")) {
b.setSubject(reader.nextString());
}else if (tagName.equals("Suffix"))
{
b.setSuffix(reader.nextString());
}
}
// System.out.println(b);
bulletins.add(b);
reader.endObject();
}
reader.endArray();
} catch (IOException e) {
e.printStackTrace();
}
9 楼
tonytony3
2014-07-31
JSONArray person = (JSONArray) jsonParser.nextValue();
// 接下来的就是JSON对象的操作了
for (int i = 0; i < person.length(); i++) {
m = new MicroBlog();
String a0 = person.getJSONObject(i).getString("ID");
// 接下来的就是JSON对象的操作了
for (int i = 0; i < person.length(); i++) {
m = new MicroBlog();
String a0 = person.getJSONObject(i).getString("ID");
8 楼
yong7356
2013-07-31
不错,学习
7 楼
gcj55586
2012-10-11
不错 很好的例子 以后应该用得到
6 楼
buptlingfeng
2012-09-24
不错,讲解很清晰,也容易懂,谢谢LZ
5 楼
xiaodatao
2012-08-04
thank you 分享!
4 楼
sosyi
2012-05-01
3 楼
zhuyz89
2012-04-21
挺好的
2 楼
lhx295801268
2012-01-12
挺有感觉到 不错
1 楼
hejian_986
2011-10-19
顶一个!
发表评论
-
Error: Cannot run program "sh": Launching failed
2014-02-20 21:05 3580**** Build of configuration De ... -
通过wifi来使用ADB[转]
2013-11-16 16:09 1428adb除了通过usb连接外,还可以通过tcp连接建立调试,在 ... -
Installation failed due to invalid APK file!
2013-11-16 15:42 8065今天在Eclipse里面测试Android的开发。 写好的代 ... -
QQ2013导致adb不能使用问题的修复[转]
2013-11-16 14:48 1557由于实在没法不用QQ,当QQ哭着闹着要升级到最新版的时候,手 ... -
adt安装慢解决
2013-06-08 14:29 4693安装adt的时候不管时在线安装还是下载下来了离线安装,都不见安 ... -
android 百度地图 wgs84和baidu09坐标转换
2012-11-14 23:35 17529wgs84: gps获取出来的坐标 ... -
hiero使用
2012-11-14 16:51 5057hiero是一个java小程序,能够帮助用户自定义.fnt ... -
分享一个日志类
2012-11-09 02:07 351/*** * <p> 封装日志api的调用 ... -
android相关工具收集
2012-07-30 09:33 1194常用 Java 静态代码分析工具的分析与比较 http://b ... -
proguard使用
2012-07-26 23:39 5255proguard的常见配置参数 -include {filen ... -
一张图让你明白android 九宫格工具使用
2012-07-07 16:13 2606... -
android sdk, adt等的下载
2012-06-28 21:38 16799一些小技巧 在eclipse中 ... -
ProgressBar定制
2011-12-07 09:04 4058ProgressBar的基本使用 可以参考这个:http:// ... -
android 源码 阅读
2011-11-24 14:50 2948虽然android的源码也时不时的会去看,但大部分还是只能看懂 ... -
Dialog定制
2011-11-18 14:47 7110定制dialog的方式 1. 可以通过Theme的方式,and ... -
Toast的使用
2011-10-31 16:12 6205Toast的基本原理其实就是将一个View添加到WindowM ... -
android 开发资料收集
2011-10-28 14:32 1669Android 解屏幕锁与点亮屏幕:键盘锁(KeyguardM ... -
android单元测试
2011-09-09 17:08 0android测试框架涉及的类的UML图 activity测 ... -
android.os包中一些类的使用
2011-09-08 15:09 23496android.os.Build Build.BOARD ... -
android游戏开发学习
2011-09-06 16:55 10888相关资源 2D中如何判断一点在另一个点的那个方位: http: ...
相关推荐
Android Json 解析demo 建立,基于Android stdio
android 项目开发实例,json 解析参考, 希望对你们有用
android json解析demo,简单粗暴
android json 解析jar包。没有积分可以取GitHub上下载
Android_JSON数据解析 博客里面的Demo
Android json解析jar包,挺方便的解析jar包。
AndroidJSON解析框架GSON,可以方便的解析JSON,提高效率,欢迎大家下载使用。
Android JSON解析示例代码.txt
android JSon解析例子,希望可以帮助大家。
android框架解析JSON数据放入ListView的例子
Android JSON 解析库的使用 里面包括详细的文档和代码 其中fastjson和gson的对比以及示例代码
Android 与后台交互,Json数据传输解析
android json 解析 fastjson。
通过编写配置文件,该代码生成器能自动生成相应的bean,和解析json的代码。 你需要做的是,有一个ruby环境,将配置...生成json解析代码: ruby json_parser.rb > JSONParser.java 不使用重定向,模式是打印在终端中。
Android JSON解析
eclipse项目。获取raw文件下的json文件。无需编写json数据里面key值的实体类,动态获取里面的键值对的值。并在列表显示
笔者近期做到对天气预报JSON数据解析,在此小记。 天气预报接口:http://wthrcdn.etouch.cn/weather_mini?citykey=101200101 JSON数据如下: { desc: OK, status: 1000, data: { wendu: 14, ganmao: 天气...
我们通常在Android上采用Gson来解析Json数据,很方便的就可以把数据转换成List或者map。当碰到日期时间的时候,你可能会遇到坑,需要格式化一下日期时间格式。 本文介绍org.json这种不需要导入任何包的解析方式,...
android移动应用的json解析数据,解析对象和数组
android json数据下载与解析demo,实现了http下载json服务器数据,并通过JsonObject解析json数据