- 浏览: 86946 次
- 性别:
- 来自: 长沙
文章分类
最新评论
-
wangyudong:
家里是拨号上网,不行的,找到了一个Holer工具,只需要配置一 ...
【如何通过广域网访问局域网的服务器?】 -
叮咚可乐名:
大数据就是这么任性第一季数据结构和算法http://pan.b ...
数据结构与算法-简介 -
戢_时光:
...
【Java集合之二】Set集合 -
lzg406:
HTTP默认方式下,使用持久连接。 这个值得推敲
【应用层】之一:HTTP协议与FTP协议 -
mute_:
特别腻害呢
正则表达式1:概念
本文围绕以下三个部分展开:
一、JSON解析
二、Gson
三、Fast-json
一、JSON解析
1. 基本概念
JSON: JavaScript Object Notation,是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。
它基于JavaScript Programming Language, Standard ECMA-262 3rd Edition - December 1999的一个子集。
JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C, C++, C#, Java, JavaScript, Perl, Python等)。它通用于C, C++, C#, Java, JavaScript, Perl, Python, PHP等编程语言的数据交换传输。
2. JSON基本结构
(1)对象
名值对的集合(A collection of name/value pairs)。
一个对象以“{”(左括号)开始,“}”(右括号)结束。每个“名称”后跟一个“:”(冒号)。名值对之间使用“,”(逗号)分隔。
(2)数组
值的有序列表(An ordered list of values)。
3. JSON具有以下这些形式:对象 (object)、数组 (array)、值 (value)、字符串(string)、数值 (number)。
JSON解析案例
创建测试类:JsonTest,继承自InstrumentationTestCase类,用于单元测试。
1. 将 java对象 转化为 JSON 对象/数组
2. JSON格式的字符串 转换为 JSON对象;JSON对象 转换为 字符串。
3. JSON数组格式的字符串 转换为 JSON数组;JSON数组中的每一项 转换为 字符串。
4. 读取 JSON 格式的文本文件,并进行解析。
(1)先创建/导入 json.txt/json.json(是一个json格式 文本文件) 到 java目录下面。
(2)将json.txt打包成jar包,并放到libs目录下,这样才能读取。
(3)读取 JSON 格式的文本文件,并进行解析。
二、Gson
1. 概念
Gson 是 Google 提供的用来在 Java 对象和 JSON 数据之间进行映射的 Java 类库。
可以将一个 JSON 字符串转成一个 Java 对象,或者反过来。
也可以通过Simple转换XML。
2. 特点
(1)快速、高效
(2)代码量少、简洁
(3)面向对象
(4)数据传递和解析方便
3. jar和源码下载地址:http://code.google.com/p/google-gson/downloads/list
4. 基本用法
(1)定义实体类
(2)根据需要可以将JSON生成单个实体或列表实体集合
Gson解析案例
1. 将 gson-2.2.2.jar 包和 simple-xml-2.6.9.jar 包放到libs下面。
2. 在java目录下创建com.android.gson目录,里面创建三个类:Book、BookList和BookService。
(1)Book.java:
(2)BookList.java:
(3)BookService.java:
3. 创建测试类:GsonTest,继承自InstrumentationTestCase类,进行单元测试。
4. Gson解析
使用 Gson 把 集合数据 转换为 json格式的字符串,然后再把 json格式的字符串 转换为 java对象。
三、Fast-json
1. 概念
Fastjson 是一个性能很好的 Java 语言实现的 JSON 解析器和生成器,来自阿里巴巴的工程师开发。它具有极快的性能,宣称超越任其他的Java Json parser。
2. 特点
(1)快速:比其它任何基于Java的解析器和生成器更快,包括jackson。
(2)强大:支持普通JDK类包括任意Java Bean Class、Collection、Map、Date或enum。
(3)零依赖:没有依赖其它任何类库除了JDK。
(4)支持注解、支持全类型序列化。
3. 基本用法
(1)定义实体类
(2)根据需要可以将JSON生成单个实体或列表实体集合
Fast-json解析案例
以后补充
一、JSON解析
二、Gson
三、Fast-json
一、JSON解析
1. 基本概念
JSON: JavaScript Object Notation,是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。
它基于JavaScript Programming Language, Standard ECMA-262 3rd Edition - December 1999的一个子集。
JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C, C++, C#, Java, JavaScript, Perl, Python等)。它通用于C, C++, C#, Java, JavaScript, Perl, Python, PHP等编程语言的数据交换传输。
2. JSON基本结构
(1)对象
名值对的集合(A collection of name/value pairs)。
一个对象以“{”(左括号)开始,“}”(右括号)结束。每个“名称”后跟一个“:”(冒号)。名值对之间使用“,”(逗号)分隔。
var myobj ={"name":"Tom","age":20};
(2)数组
值的有序列表(An ordered list of values)。
3. JSON具有以下这些形式:对象 (object)、数组 (array)、值 (value)、字符串(string)、数值 (number)。
JSON解析案例
创建测试类:JsonTest,继承自InstrumentationTestCase类,用于单元测试。
package com.android.dataparsing; import android.test.InstrumentationTestCase; /** * Created by Xiangdong on 2015/9/5. */ public class JsonTest extends InstrumentationTestCase { }
1. 将 java对象 转化为 JSON 对象/数组
package com.android.dataparsing; import android.test.InstrumentationTestCase; import android.util.Log; import org.json.JSONArray; import org.json.JSONObject; /** * Created by Xiangdong on 2015/9/5. */ public class JsonTest extends InstrumentationTestCase { private static final String TAG = "MainActivity"; /** * 将 java对象 转化为 JSON 对象/数组 * * @throws Exception */ public void testObject2Json() throws Exception { // 情况1:java对象 -> JSON对象 JSONObject jsonObject = new JSONObject(); jsonObject.put("name", "段誉"); jsonObject.put("age", 16); // 输出:{"name":"段誉","age":16} Log.v(TAG, jsonObject.toString()); // 情况2:JSON对象中嵌套JSON对象 JSONObject addressObj = new JSONObject(); addressObj.put("city", "长沙"); addressObj.put("street", "南阳街"); // 嵌套 jsonObject.put("address", addressObj); // 输出:{"name":"段誉","age":16,"address":{"city":"长沙",""street","南阳街"}} Log.v(TAG, jsonObject.toString()); // 情况3:java对象 -> JSON数组 JSONArray ja = new JSONArray(); ja.put("130"); ja.put("155"); ja.put("188"); // 输出:["130","155","188"] Log.v(TAG, ja.toString()); // 情况4:JSON对象中嵌套JSON数组 jsonObject.put("phone", ja); // 输出:{"name":"段誉","age":16,"address":{"city":"长沙","street":"南阳街"},"phone":["130","155","188"]} Log.v(TAG, jsonObject.toString()); } }
2. JSON格式的字符串 转换为 JSON对象;JSON对象 转换为 字符串。
package com.android.dataparsing; import android.test.InstrumentationTestCase; import android.util.Log; import org.json.JSONObject; /** * Created by Xiangdong on 2015/9/5. */ public class JsonTest extends InstrumentationTestCase { private static final String TAG = "MainActivity"; /** * JSON格式的字符串 转换为 JSON对象; * JSON对象 转换为 字符串 * * @throws Exception */ public void testJson2Object() throws Exception { String json = "{'name':'Tom','age':20}"; // 情况1:将 JSON格式的字符串 转为 JSON对象 JSONObject jsonObj = new JSONObject(json); // 输出:{"name":"Tom","age":"20"} - 引号就没有了。 Log.v(TAG, jsonObj.toString()); // 情况2:将JSON对象转换为 字符串 String name = jsonObj.getString("name"); int age = jsonObj.getInt("age"); String text = String.format("%s,%d", name, age); // 输出:String->JSON: Tom,20 Log.v(TAG, "JSON->String: " + text); } }
3. JSON数组格式的字符串 转换为 JSON数组;JSON数组中的每一项 转换为 字符串。
package com.android.dataparsing; import android.test.InstrumentationTestCase; import android.util.Log; import org.json.JSONArray; /** * Created by Xiangdong on 2015/9/5. */ public class JsonTest extends InstrumentationTestCase { private static final String TAG = "MainActivity"; /** * JSON数组格式的字符串 转换为 JSON数组; * JSON数组中的每一项 转换为 字符串 * * @throws Exception */ public void testArray2Object() throws Exception { String json = "[jack,tom,rose]"; JSONArray array = new JSONArray(json); for (int i = 0; i < array.length(); i++) { String s = String.format("%s", array.get(i)); // jack // tom // rose Log.v(TAG, s); } } }
4. 读取 JSON 格式的文本文件,并进行解析。
(1)先创建/导入 json.txt/json.json(是一个json格式 文本文件) 到 java目录下面。
[ {"name":"段誉","age":"16","sex":"男","address":"大理"}, {"name":"王语嫣","age":"17","sex":"女","address":"姑苏"}, {"name":"乔峰","age":"32","sex":"男","address":"契丹"}, {"name":"Tom","age":"20","sex":"M","address":"New York"} ]
(2)将json.txt打包成jar包,并放到libs目录下,这样才能读取。
(3)读取 JSON 格式的文本文件,并进行解析。
package com.android.dataparsing; import android.test.InstrumentationTestCase; import android.util.Log; import org.json.JSONArray; import org.json.JSONObject; import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; /** * Created by Xiangdong on 2015/9/5. */ public class JsonTest extends InstrumentationTestCase { private static final String TAG = "MainActivity"; /** * 读取 JSON 格式的文本文件,并进行解析 * * @throws Exception */ public void testReadFile() throws Exception { // 读取文件到缓冲 InputStream in = getClass().getClassLoader() .getResourceAsStream("json.txt"); // 用 BufferedReader 包装(因为要用文件的内容,因此要通过这个流去读) BufferedReader reader = new BufferedReader(new InputStreamReader(in)); // 情况1:文件内容 转换为 字符串 // 方法(1):使用 StringBuilder。 // StringBuilder 类似于 StringBuffer,用来拼接字符串 StringBuilder builder = new StringBuilder(); String line; while ((line = reader.readLine()) != null) { builder.append(line); } // json.txt文件的内容 String data = builder.toString(); Log.v(TAG, data); // 方法(2):使用 String。 String s = ""; String line2; while ((line2 = reader.readLine()) != null) { s += line2; } // json.txt文件的内容 Log.v(TAG, s); // 情况2:将JSON数组格式的字符串 转换为 JSON数组 JSONArray ja = new JSONArray(data); // 情况3:从 JSON数组 中取出每个 JSON对象 for (int i = 0; i < ja.length(); i++) { JSONObject jsonObj = ja.getJSONObject(i); // 情况4:将 JSON对象 转换为 字符串 String name = jsonObj.getString("name"); String age = jsonObj.getString("age"); String sex = jsonObj.getString("sex"); String address = jsonObj.getString("address"); String text = String.format("%s,%s,%s,%s", name, age, sex, address); Log.v(TAG, text); } } }
二、Gson
1. 概念
Gson 是 Google 提供的用来在 Java 对象和 JSON 数据之间进行映射的 Java 类库。
可以将一个 JSON 字符串转成一个 Java 对象,或者反过来。
也可以通过Simple转换XML。
2. 特点
(1)快速、高效
(2)代码量少、简洁
(3)面向对象
(4)数据传递和解析方便
3. jar和源码下载地址:http://code.google.com/p/google-gson/downloads/list
4. 基本用法
(1)定义实体类
(2)根据需要可以将JSON生成单个实体或列表实体集合
Gson解析案例
1. 将 gson-2.2.2.jar 包和 simple-xml-2.6.9.jar 包放到libs下面。
2. 在java目录下创建com.android.gson目录,里面创建三个类:Book、BookList和BookService。
(1)Book.java:
package com.android.gson; import org.simpleframework.xml.Element; import org.simpleframework.xml.Root; /** * 创建1本书的pojo类。 * * * 对应的XML结构: * <Book> * <isbn> * <title> * <author> * <image> * </Book> * * * Created by XiangdongLee on 2015/9/7 */ @Root // 此处Root后面没有起名字,因此默认的根元素为:类名(Book) public class Book { @Element private String isbn; // 编号 @Element private String title; @Element private String author; @Element(required = false) // 允许没有图片 private String image; public Book() { } public Book(String isbn, String title, String author, String image) { this.isbn = isbn; this.title = title; this.author = author; this.image = image; } @Override public String toString() { return "Book [isbn=" + isbn + ", title=" + title + ", author=" + author + ", image=" + image + "]"; } public String getIsbn() { return isbn; } public void setIsbn(String isbn) { this.isbn = isbn; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public String getAuthor() { return author; } public void setAuthor(String author) { this.author = author; } public String getImage() { return image; } public void setImage(String image) { this.image = image; } }
(2)BookList.java:
package com.android.gson; import org.simpleframework.xml.ElementList; import org.simpleframework.xml.Root; import java.util.LinkedList; /** * 创建多本书(集合)的pojo类。 * * * 对应的XML结构: * <book-list> * <Book> * <isbn> * <title> * <author> * <image> * </Book> * * <Book> * <isbn> * <title> * <author> * <image> * </Book> * </book-list> * * * Created by XiangdongLee on 2015/9/7 */ @Root(name = "book-list") // 此处Root后面根元素重新起了名字,因此根元素名字为:book-list public class BookList { @ElementList(inline = true) // 元素列表 private LinkedList<Book> list; public BookList() { list = new LinkedList<Book>(); // 构造方法中创建出集合 } public LinkedList<Book> getList() { return list; } public void setList(LinkedList<Book> list) { this.list = list; } public void addBook(Book book) { list.add(book); } public int size() { return list.size(); } public void set(int index, Book element) { list.set(index, element); } public Book get(int index) { return list.get(index); } @Override public String toString() { return "BookList [list=" + list + "]"; } }
(3)BookService.java:
package com.android.gson; /** * Created by XiangdongLee on 2015/9/7 */ public class BookService { private static BookList list = new BookList(); // 放在 static静态块中:只要应用程序不结束,就一直存在 // 这些数据相当于来自数据库的数据 static { list.addBook(new Book("9787506287081", "认识电影", "路易斯·贾内梯", "/images/1.jpg")); list.addBook(new Book("9787513300711", "失控", "凯文·凯利", "/images/2.jpg")); list.addBook(new Book("9787115293800", "算法", "Robert", "/images/3.jpg")); list.addBook(new Book("9787544704007", "悲剧的诞生", "尼采", "/images/4.jpg")); list.addBook(new Book("9787506285728", "社会学与生活", "理查德.谢弗", "/images/5.jpg")); list.addBook(new Book("9787544707206", "万有引力之虹", "托马斯·品钦", "/images/6.jpg")); list.addBook(new Book("9787229042066", "地球往事", "刘慈欣", "/images/7.jpg")); list.addBook(new Book("9787229047221", "冰与火之歌", "乔治·马丁", "/images/8.jpg")); } public static BookList getBookList() { return list; } public static void addBook(Book book) { list.addBook(book); } }
3. 创建测试类:GsonTest,继承自InstrumentationTestCase类,进行单元测试。
package com.android.dataparsing; import android.test.InstrumentationTestCase; import com.android.gson.Book; import com.google.gson.Gson; import com.google.gson.reflect.TypeToken; import org.simpleframework.xml.core.Persister; import java.lang.reflect.Type; import java.util.List; /** * Created by XiangdongLee on 2015/9/7. */ public class GsonTest extends InstrumentationTestCase { private static final String TAG = "MainActivity"; private Gson gson; private Type bookListType; private Persister persister; /** * 重写测试案例中的初始化方法:用来初始化 Gson * * @throws Exception */ @Override protected void setUp() throws Exception { gson = new Gson(); bookListType = new TypeToken<List<Book>>(){ }.getType(); persister = new Persister(); } }
4. Gson解析
使用 Gson 把 集合数据 转换为 json格式的字符串,然后再把 json格式的字符串 转换为 java对象。
package com.android.dataparsing; import android.test.InstrumentationTestCase; import android.util.Log; import com.android.gson.Book; import com.android.gson.BookList; import com.android.gson.BookService; import com.google.gson.Gson; import com.google.gson.reflect.TypeToken; import org.json.JSONArray; import org.json.JSONObject; import org.simpleframework.xml.core.Persister; import java.lang.reflect.Type; import java.util.List; /** * Created by XiangdongLee on 2015/9/7. */ public class GsonTest extends InstrumentationTestCase { private static final String TAG = "MainActivity"; private Gson gson; private Type bookListType; private Persister persister; /** * 重写测试案例中的初始化方法:用来初始化 Gson * * @throws Exception */ @Override protected void setUp() throws Exception { gson = new Gson(); bookListType = new TypeToken<List<Book>>(){ }.getType(); persister = new Persister(); } /** * 使用 Gson 把 集合数据 转换为 json格式的字符串, * 然后再把 json格式的字符串 转换为 java对象。 */ public void testToJsonFromList() throws Exception{ BookList list = BookService.getBookList(); Log.v(TAG, list.toString()); // 情况1:使用 Gson 把集合数据转换为 json格式的字符串 String json = gson.toJson(list.getList(), bookListType); Log.v(TAG,json); // 情况2:使用 Gson把 json格式的字符串 转换为 java对象 Book book = gson.fromJson(json, Book.class); // Book [isbn=9787506287081, title=认识电影, author=路易斯·贾内梯, image=/images/1.jpg] Log.v(TAG,book.toString()); // 情况2.1:也可以通过JSON把 json格式的字符串 转换为 json数组 JSONArray ja = new JSONArray(json); for(int i=0;i<ja.length();i++){ // 拿到 json对象中的 某一个值("title")。 JSONObject jsonObj = ja.getJSONObject(i); // Log.v(TAG,jsonObj.toString()); Log.v(TAG,jsonObj.getString("title")); } } }
三、Fast-json
1. 概念
Fastjson 是一个性能很好的 Java 语言实现的 JSON 解析器和生成器,来自阿里巴巴的工程师开发。它具有极快的性能,宣称超越任其他的Java Json parser。
2. 特点
(1)快速:比其它任何基于Java的解析器和生成器更快,包括jackson。
(2)强大:支持普通JDK类包括任意Java Bean Class、Collection、Map、Date或enum。
(3)零依赖:没有依赖其它任何类库除了JDK。
(4)支持注解、支持全类型序列化。
3. 基本用法
(1)定义实体类
(2)根据需要可以将JSON生成单个实体或列表实体集合
Fast-json解析案例
以后补充
发表评论
-
【攻克Android (43)】WebView (网络视图)
2015-09-09 22:15 1198本文围绕以下两个部分展开: 一、WebView WebVi ... -
WebView (网络视图)
2015-09-09 22:12 0本文围绕以下两个部分展开: 一、WebView WebVi ... -
【攻克Android (41)】HttpURLConnection
2015-09-08 17:43 1297本文围绕以下三个部分展开: 一、HttpURLConnec ... -
HttpURLConnection
2015-09-08 17:42 0本文围绕以下三个部分展开: 一、HttpURLConnec ... -
JSON解析
2015-09-07 20:47 0本文围绕以下三个部分 ... -
【攻克Android (39):XML解析之四】Simple方式解析XML
2015-08-27 18:38 1650本文围绕以下三个部分 ... -
【攻克Android (38):XML解析之三】Pull方式解析XML
2015-08-27 09:25 1680本文围绕以下两个部分展开: 一、Pull解析 案例一:P ... -
【攻克Android (37):XML解析之二】SAX方式解析XML
2015-08-26 15:15 835本文围绕以下两个部分展开: 一、SAX解析 案例一 ... -
【XML解析之一】SAX方式解析XML
2015-08-26 02:58 0本文围绕以下四个部分展开: 一、SAX解析 案例一 ... -
【攻克Android (36):XML解析之一】DOM方式解析XML
2015-08-26 00:27 880本文围绕以下三个部分展开: 一、XML概述 二、DOM解析 ... -
DOM方式解析XML案例
2015-08-26 00:26 0本文围绕以下四个部分展开: 一、DOM解析 案例一 ... -
【XML解析之四】Simple方式解析XML
2015-08-27 18:36 0本文围绕以下三个部分 ... -
【XML解析之一】Pull方式解析XML
2015-08-26 02:56 0本文围绕以下四个部分展开: 一、Pull解析 案例一:P ... -
【攻克Android (22)】View/Tween Animation 视图动画(补间动画)
2015-08-25 21:22 828本文围绕以下四个部分 ... -
【攻克Android (22)】View/Tween Animation 视图动画(补间动画)
2015-08-25 21:21 0本文围绕以下四个部分 ... -
【攻克Android (45)】四大组件之 ContentProvider
2015-08-18 16:24 993本文围绕以下两个部分展开: 一、ContentProvide ... -
【攻克Android (32)】Notification 通知
2015-08-17 19:57 881本文围绕以下两个部分展开: 一、通知 案例一 一 ... -
Notification 通知
2015-08-17 19:56 0本文围绕以下两个部分展开: 一、通知 案例一 一 ... -
BroadcastReceiver完整版
2015-08-17 13:15 0本文围绕以下四个部分展开: 一、广播 案例一:系统广播(属于 ... -
【攻克Android (33)】四大组件之 BroadcastReceiver
2015-08-17 13:14 1059本文围绕以下三个部分 ...
相关推荐
徐绽三层递进攻克考研英语阅读真题1994解析 徐绽 英语 真题解答
2021版高考化学一轮复习热点突破微课10利用电池工作原理攻克新型电池练习含解析鲁科版
想学好英语却却又找不到好方法的同志们注意啦:四级前的突击尽在此!
江苏省2020届高考生物二轮复习考前专题增分大题冲关7攻克遗传实验设计题含解析
2020_2021学年高考语文一轮复习专项对点练4增强层次意识攻克图表信息转述题含解析新人教版
24学时攻克c++_ 笔记
24学时攻克c++,这本书不错,不过只上传了23页
24小时攻克c++代码
详尽解释 android 里的Activity的生命周期问题,攻克开发android程序中的难题
大学生攻克Linux系统教程(又名天下没有难学的Linux)。一位在校大学生整理的教程,献给每一位要征服Linux的学习者-五星级的Linux教程。 本书汇集众多Linux学习者的心血与贡献,有很多作者在默默的为你呼喊,感谢...
8天攻克8000词汇,word版,方便学习,背单词的好东东
英语四级资料,40天攻克大学英语四级(词汇·语法·完形填空分册)
一天攻克平衡小车(含STC15及STM32) 一天攻克平衡小车(含STC15及STM32) 一天攻克平衡小车(含STC15及STM32) 一天攻克平衡小车(含STC15及STM32)
英语\40天攻克大家英语四级(阅读·简答分册).
考研英语长句、难句解析。。。。。 一、课程简介: 1、考研的两个难点:词汇和长难句 2、攻克长难句对于考研的意义:完型、阅读、新题型、翻译 3、如何攻克长难句:剖析其结构、总结其特征、推敲其译文 4、阅读和...
彻底搞清楚继承是个什么东西 彻底搞清楚虚函数和虚函数表是个什么东西
大学生攻克Linux系统教程(又名天下没有难学的Linux)
迈向2035:攻克数字经济下的人才战.pdf
给初学者的教程, 内容比较基础.包括安装,熟悉Linux环境,VI基础,GDB基础. 编程基础. 内容与一些linux的基础手册类似.