Android中解析json数据的三种方式
来源:互联网 发布:oracle sql 去掉重复 编辑:程序博客网 时间:2024/06/05 14:13
Json简介
JAVAScript Object Notation是一种轻量级的数据交换格式
具有良好的可读和便于快速编写的特性。
业内主流技术为其提供了完整的解决方案(有点类似于正则表达式 ,获得了当今大部分语言的支持)
JSON采用兼容性很高的文本格式,同时也具备类似于C语言体系的行为。 – Json.org
JSON作为数据是目前网络中主流的数据传输格式之一,应用十分广泛,说是使用率达到99%一点也不勉强
JSON支持的数据类型
我们要学习使用JSON解析,必须对JSON解析的规则原理有深刻的认识和了解,然后才知道它的一个实现原理 ,JSON里面的数据是以一种键值对的方式存在 (“key”:”value”)中值的类型可以是下面数据类型中的任意一种:
1. 数字(整数或浮点数)
2. 逻辑值(true 或 false)
3. 字符串(在双引号中)
4. 数组(在方括号中)
5. 函数
6. 对象(在大括号中)
7. null
JSON语法规则
JSON的语法规则非常的简单,就是使用
大括号’{}’,
中括号’[]’,
逗号’,’,
冒号’:’,
双引号’“”’。数据类型:
嵌套对象、数组、字符串、数字、布尔值或空值。我们在JSON解析中只有三中情况出现
1.{} 解析’大括号’类型
2. [ ] 解析是’中括号’类型
3. 其实只有两种,那第三种则是1与2的组合方法即”{’name’:’李书豪’ ,’hobby’:[‘编程’,’电竞’,’睡觉’]}”那么下面分别来看一些这三种类型以及解析
JSON基本语法与图例
Object(对象类型)
用{ }包含一系列无序的key–Value键值对表示,其中Key和Value之间用冒号分割,每个key-value之间用逗号分割。
Array(数组类型)
使用[ ]包含所有元素,每个元素用逗号分隔,元素可以是任意的值
二者相结合型
JSON数据解析
JSON解析一定要掌握的两条规则:
1.如果看到是{ }–>使用JSONObject
2.如果看到的[ ]–>使用JSONArray解析
掌握了JSON的数据类型和基本语法后,下面我们将对JSON的各种语法类型进行详细解析(注意掌握两条规则的使用,掌握了JSON解析就那么回事)
Android解析json方案
Json数据
[{"code":"110000","sheng":"11","di":"00","xian":"00","name":"北京市","level":1},{"code":"659004","sheng":"65","di":"90","xian":"04","name":"五家渠市","level":3},{"code":"710000","sheng":"71","di":"00","xian":"00","name":"台湾省","level":1},{"code":"810000","sheng":"81","di":"00","xian":"00","name":"香港特别行政区","level":1},{"code":"820000","sheng":"82","di":"00","xian":"00","name":"澳门特别行政区","level":1}]
这里附上一个检查json数据格式是否正确的网站http://www.json.cn/
通过网站解析工具解析完的数据格式如下
[ { "code":"110000", "sheng":"11", "di":"00", "xian":"00", "name":"北京市", "level":1 }, { "code":"659004", "sheng":"65", "di":"90", "xian":"04", "name":"五家渠市", "level":3 }, { "code":"710000", "sheng":"71", "di":"00", "xian":"00", "name":"台湾省", "level":1 }, { "code":"810000", "sheng":"81", "di":"00", "xian":"00", "name":"香港特别行政区", "level":1 }, { "code":"820000", "sheng":"82", "di":"00", "xian":"00", "name":"澳门特别行政区", "level":1 }]
第一种方案:android自带的解析
json_btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { String s = getString(); Log.d("txt",s); List<City> list = new ArrayList<City>(); try { JSONArray obj = new JSONArray(s); for(int i=0;i<obj.length();i++){ JSONObject jsonobj = (JSONObject)obj.get(i); City city = new City(); city.setCode(jsonobj.getString("code")); city.setSheng(jsonobj.optString("sheng")); city.setDi(jsonobj.optString("di")); city.setXian(jsonobj.optString("xian")); city.setName(jsonobj.optString("name")); city.setLevel(jsonobj.optInt("level")); Log.d("txt",city.toString()); textView.append(city.toString()); } } catch (JSONException e) { e.printStackTrace(); } } });
先获取JSON数组,在解析JsonObject。
第二种方案: Gson解析
Gson_btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { String s = getString(); JsonParser parser = new JsonParser(); JsonArray jsonArray = parser.parse(s).getAsJsonArray(); Gson gson = new Gson(); for (JsonElement obj:jsonArray){ City city = gson.fromJson(obj,City.class); Log.d("txt", city.toString()); textView.append(city.toString()); } } });
先获取Json数组,再解析jsonObject。
第三种方案:FastJson
fastjson_btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { String s = getString(); Log.d("txt",s); List<City> lists = JSON.parseArray(s,City.class); for(City city:lists){ textView.append(city.toString()); Log.d("txt",city.toString()); } } });
直接获取JsonArray解析List。
public static final Object parse(String text); // 把JSON文本parse为JSONObject或者JSONArray public static final JSONObject parseObject(String text); // 把JSON文本parse成JSONObject public static final <T> T parseObject(String text, Class<T> clazz); // 把JSON文本parse为JavaBean public static final JSONArray parseArray(String text); // 把JSON文本parse成JSONArray public static final <T> List<T> parseArray(String text, Class<T> clazz); //把JSON文本parse成JavaBean集合 public static final String toJSONString(Object object); // 将JavaBean序列化为JSON文本 public static final String toJSONString(Object object, boolean prettyFormat); // 将JavaBean序列化为带格式的JSON文本
public static final Object toJSON(Object javaObject); 将JavaBean转换为JSONObject或者JSONArray(和上面方法的区别是返回值是不一样的)
三种解析方法,个人感觉fastjson使用起来还是很方便的。
- Android中解析json数据的三种方式
- Android---JSON的三种解析方式
- Android:解析JSON的三种方式
- JSON数据解析的三种情况+pjson的方式
- Android中解析json数据的方式之一:Gson
- Android中json数据手动解析方式
- Android 小功能 -- JSON的三种解析方式
- [Android学习]JSON的三种解析方式
- [Android学习]JSON的三种解析方式
- Android之JSON的三种解析方式
- [Android学习]JSON的三种解析方式
- Android解析Json三种方式
- ajax中解析json数据的方式
- XML数据的三种解析(JSON方式 , DOM方式 , Sax方式)
- Android Json数据解析的四种方式
- JavaScript中解析JSON数据的三种方法
- Andorid解析json的三种方式
- JSON的三种解析方式
- Postgresql连接用户过多
- [ 数据结构 ] DS线性表综合练习--组队列
- Android MVVM模式的理解
- java面试题(4)
- 管道pipe 基础
- Android中解析json数据的三种方式
- 初学Android之Tablayout+Fragment+ImageLoader(低仿知乎)
- java面试题(5)
- ant+findbugs 扫描代码生成报告
- java面试题(6)
- POJ1062->最短路Dij
- java面试题(7)
- java面试题(8)
- Apply与call理解与用法