想来想去又坑爹了,数据保存到json中去了,如何拿出来使用了,所以这一篇又要实现和上一篇相反的过程,

将Json转换成java各种对象:

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。它基于JavaScript Programming Language, Standard ECMA-262 3rd Edition - December 1999的一个子集。JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C, C++, C#, Java, JavaScript, Perl, Python等)。这些特性使JSON成为理想的数据交换语言。

   欲实现JSON字符串和java对象之间的互相转换,方法有很多!本人层也因为项目上的需求,一度对这几种方法做过研究和试验!现将自己的一点小经验分享与大家,如有纰漏,请指正!


   1.通过json_lib来实现对json和java对象之间的转换,使用JSON-LIB可以极大的简化JAVA对象转换成JSON对象所需进行的操作,更可以避免人工操作生成JSON对象字符串时带来的麻烦和误操作:

   注:欲使用json_lib需要以下几个jar包的支持:

json-lib-1.1-jdk15.jar  下载地址:http://json-lib.sourceforge.net

       commons-collections-3.2.1.jar

       commons-lang-2.4.jar

       commons-logging-1.1.1.jar

       commons-beanutils-1.8.0.jar

       以上commons系列包在tomcat/comon/lib下可以找到;

       ezmorph-1.0.6.jar    下载地址http://ezmorph.sourceforge.net

       morph-1.0.1 下载地址:http://morph.sourceforge.net

   有了这些jar包的支持,平时关于json处理的方法都可以找到对应的类;贴上一段代码示例:

package util;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;import java.util.Set;import net.sf.json.JSONArray;import net.sf.json.JSONObject;public class JSONHelper {/*** 将JSONArray对象转换成Map-List集合* @param jsonArr* @return*/public static Object JsonToList(JSONArray jsonArr){List<Object> jsonObjList = new ArrayList<Object> ();for(Object obj : jsonArr){if(obj instanceof JSONArray){jsonObjList.add(JsonToList((JSONArray) obj));} else if(obj instanceof JSONObject){jsonObjList.add(JsonToMap((JSONObject) obj));}else{jsonObjList.add(obj);}}return jsonObjList;}/***  将JSONObjec对象转换成Map-List集合* @param json* @return*/public static Map<String, Object> JsonToMap(JSONObject json){Map<String,Object> columnValMap = new HashMap<String,Object>();Set<Object> jsonKeys = json.keySet();for (Object key : jsonKeys) {Object JsonValObj = json.get(key);if(JsonValObj instanceof JSONArray){columnValMap.put((String)key,  JsonToList((JSONArray) JsonValObj));}else if(key instanceof JSONObject){columnValMap.put((String)key,  JsonToMap((JSONObject) JsonValObj));}else{columnValMap.put((String)key,JsonValObj);}}return columnValMap;}/*** 将json对象转换为map集合,通过此方法获取存放map集合键的list集合* @param obj* @return*/public static List<Object> mapKeys(Object obj){List<Object> keysList = new ArrayList<Object>();Map<String,Object> columnValMap = new HashMap<String,Object>();String columnStr = "column";if(obj instanceof JSONArray){List<Map<String, Object>> jsonObjList = new ArrayList<Map<String, Object>> ();jsonObjList = (List<Map<String, Object>>) JsonToList((JSONArray) obj);columnValMap =(Map<String, Object>) (jsonObjList.get(0));//以上三句可优化为如下一句//columnValMap =(Map<String, Object>)(((List<Object>)JsonToList((JSONArray) obj)).get(0));
}else if(obj instanceof JSONObject){columnValMap =JsonToMap((JSONObject) obj);}else{keysList.add(obj);}for(int i=0;i<columnValMap.keySet().size();i++){keysList.add(columnStr+(i+1));}System.out.println(keysList.size());return keysList;}}

2.通过使用谷歌的Gson来处理json字符串,谷歌的Gson针对封装的javaBean处理起来很方便,但对于未封装的json字符串需要找到技巧处理起来也才能顺手。

      使用谷歌的Gson当然也需要jar包的支持,这需要一个jar包:Gson.jar

      下载地址:http://code.google.com/p/google-gson/downloads/detail?name=google-gson-2.2.4-release.zip

       示例:将通过js获取的json字符串转换为Map、List集合,代码如下:

package util;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;import com.google.gson.Gson;public class JSONHelper {private Gson gson = new Gson();/*** 将json对象转换为map集合,通过此方法获取存放map集合键的list集合* @param obj* @return*/public static List<Object> mapKeys(Map<?,?> map){List<Object> keysList = new ArrayList<Object>();String columnStr="column";for(int i=0;i<map.keySet().size();i++){keysList.add(columnStr+(i+1));}System.out.println(keysList.size());return keysList;} /*** 将传入的json字符串转换为元素为map集合的List集合* @param jsonArrStr* @return*/public static List<Map<String, Object>> jsonObjList(String jsonArrStr) {List<Map<String, Object>> jsonObjList = new ArrayList<Map<String, Object>>();List<?> jsonList = Test.jsonToList(jsonArrStr);Gson gson = new Gson();for (Object object : jsonList) {String jsonStr = gson.toJson(object);Map<?, ?> json = Test.jsonToMap(jsonStr);jsonObjList.add((Map<String, Object>) json);}return jsonObjList;} /*** 将传入的json字符串解析为List集合* @param jsonStr* @return*/public static List<?> jsonToList(String jsonStr) {List<?> ObjectList = null;Gson gson = new Gson();java.lang.reflect.Type type = new com.google.gson.reflect.TypeToken<List<?>>() {}.getType();ObjectList = gson.fromJson(jsonStr, type);return ObjectList;}/*** 将传入的json字符串解析为Map集合* @param jsonStr* @return*/public static Map<?, ?> jsonToMap(String jsonStr) {Map<?, ?> ObjectMap = null;Gson gson = new Gson();java.lang.reflect.Type type = new com.google.gson.reflect.TypeToken<Map<?,?>>() {}.getType();ObjectMap = gson.fromJson(jsonStr, type);return ObjectMap;}}

3.使用最轻量级的org.json.jar实现json字符串和java对象之间的互转

       所需jar包:org.json.jar

       下载地址:www.json.org  或第三方:http://kiccp.sinaapp.com/store/info/111

       同样实现对json字符串转换为Map、List集合,代码如下:

package util;import java.util.ArrayList;import java.util.HashMap;import java.util.Iterator;import java.util.List;import java.util.Map;import org.json.JSONArray;import org.json.JSONException;import org.json.JSONObject;/*** 此类是处理json字符串的工具类** @author xiaomeng* @since 2013-08-27**/public class JSONHelper {/*** 将json字符串转换为List集合** @param jsonArrStr* @return*/public static List<Map<String, Object>> jsonObjList(String jsonArrStr) {List<Map<String, Object>> jsonList = new ArrayList<Map<String, Object>>();JSONArray jsonArr = null;try {jsonArr = new JSONArray(jsonArrStr);jsonList = (List<Map<String, Object>>)JSONHelper.jsonToList(jsonArr);} catch (JSONException e) {System.out.println("Json字符串转换异常!");e.printStackTrace();}return jsonList;}/*** 将json对象的键值存放在集合,映射table的column** @param map* @return*/public static List<String> jsonMapKeysList(Map<?, ?> map) {List<String> jsonjsonList = new ArrayList<String>();String columnStr = "column";for (int i = 0; i < map.keySet().size(); i++) {jsonjsonList.add(columnStr + (i + 1));}System.out.println(jsonjsonList.size());return jsonjsonList;}/*** 将传递近来的json数组转换为List集合** @param jsonArr* @return* @throws JSONException*/private static List<?> jsonToList(JSONArray jsonArr)throws JSONException {List<Object> jsonToMapList = new ArrayList<Object>();for (int i = 0; i < jsonArr.length(); i++) {Object object = jsonArr.get(i);if (object instanceof JSONArray) {jsonToMapList.add(JSONHelper.jsonToList((JSONArray) object));} else if (object instanceof JSONObject) {jsonToMapList.add(JSONHelper.jsonToMap((JSONObject) object));} else {jsonToMapList.add(object);}}return jsonToMapList;}/*** 将传递近来的json对象转换为Map集合** @param jsonObj* @return* @throws JSONException*/@SuppressWarnings("unchecked")private static Map<String, Object> jsonToMap(JSONObject jsonObj)throws JSONException {Map<String, Object> jsonMap = new HashMap<String, Object>();Iterator<String> jsonKeys = jsonObj.keys();while (jsonKeys.hasNext()) {String jsonKey = jsonKeys.next();Object jsonValObj = jsonObj.get(jsonKey);if (jsonValObj instanceof JSONArray) {jsonMap.put(jsonKey, JSONHelper.jsonToList((JSONArray) jsonValObj));} else if (jsonValObj instanceof JSONObject) {jsonMap.put(jsonKey, JSONHelper.jsonToMap((JSONObject) jsonValObj));} else {jsonMap.put(jsonKey, jsonValObj);}}return jsonMap;}}

以上三种常用的json和java对象之间的互相转换方法各有其特点,根据我的小经验,现将其优缺点总如下,供参考!

    1.json_lib json解析框架

       优点:各种复杂json格式和对json处理的一般需求都可以做到

       缺点:所需支持的jar文件较多,并且关于jar包版本或许会出现一些杂七杂八的问题

    2.谷歌Gson对json的解析:

       优点:(1)。可以谷歌的Gson就是为处理java对象和json之间转换开发的框架,其可以很简单、方便的对封装的java对象和json格式文本之间的转换,包括java工具类集合之间的转换也很方便;(2)。相对json_lib框架来说,只需要一个Gson.jar就可以,需要jar文件数量少;

       缺点:由于其相对来说偏向于处理java对象和json之间的转换,所以其只简单的处理json字符串和集合类之间的转换稍微需要一个过渡,就是使用反射确定转换的java对象类型。

     3.org.json框架

       优点:在这三者之中,其实最轻量级、同谷歌Gson一样所需jar文件也是最少的一种方法,并且其在处理json字符串到java集合的转黄相对简便

缺点:相对Gson处理java对象和json之间的转换比较费事

综述:这三种解析json的方法各有优缺点,具体可根据自己需求选择使用。

这个自己公司还好啦,有完整更全面的转换类.

参考: http://mengzhengbin520.blog.51cto.com/7590564/1283361

下一篇还是添加以下如何转换成xml文件.

转载于:https://www.cnblogs.com/MMLoveMeMM/articles/3627438.html

Android Sqite数据库 6相关推荐

  1. android专题-数据库Room

    android专题-数据库Room Room介绍 room是Google官方推荐的ORM数据库框架,抽象出sqlite访问的数据库. 包含三大组件: Entity 定义 表结构,每个entity类对一 ...

  2. android与mysql数据库同步_android开发 如何通过web服务器访问MYSQL数据库并且使其数据同步到android SQLite数据库?...

    通过web服务器访问MYSQL数据库有以下几个过程: 1.在MySql下创建自己的数据库和自己的表单 2.连接数据库. 3.访问数据库 1.创建web工程 (服务器端) 在Myeclipse下新建一个 ...

  3. android 建数据库 SQLite 存储sd 卡或者内存

    android 创建数据库调用SQLiteOpenHelper,一般不直接操作SQLiteDatabase . 是通过SQLiteOpenHelper来获取 public class DBOpenHe ...

  4. android 数据库表格数据库数据库中,Android SQLite数据库中的表详解

    Android SQLite数据库 前言 以前写PHP的时候,内置了print_r()和var_dump()两个函数用于打印输出任意类型的数据内部结构,现在做Android的开发,发现并没有这种类似的 ...

  5. android面向数据库的的编程工具-OrmLite

    数据库操作框架OrmLite ORMlite是类似hibernate的对象映射框架,主要面向java语言,同时,是时下最流行的android面向数据库的的编程工具. 对象关系映射(Object Rel ...

  6. 使用浏览器查看Android SQLite数据库-Android Debug Database用法

    本文转载自[http://blog.csdn.net/o279642707/article/details/68946230] 前言 Android客户端查看sqlite数据库是很繁琐的事情,需要DD ...

  7. 利用SQLChiper对Android SQLite数据库加密

    利用SQLChiper对Android SQLite数据库加密 前言: 上篇文章讲了Android studio+SQLCipher加密SQLite数据库的几个坑,跳过这几个坑,那么SQLCipher ...

  8. android SQLite数据库的使用

    今天,简单讲讲android如何使用SQLite数据库.  最近,自己在做一个功能时又用到了SQLite数据库,发现自己还是掌握的不很全面.其实之前的app里面也一直用到了数据库,但是自己没有花时 ...

  9. Android SQLite 数据库详细介绍

    Android SQLite 数据库详细介绍我们在编写数据库应用软件时,需要考虑这样的问题:因为我们开发的软件可能会安装在很多用户的手机上,如果应用使用到了SQLite数据库,我们必须在用户初次使用软 ...

最新文章

  1. canvas的特别棒的feature:badge!!!
  2. 1.1收集域名信息-完整介绍
  3. arcgis js 4.x 地图中加入图片
  4. 突破变态限制快捷方式提权法
  5. lldp协议代码阅读_LLDP 链路层发现协议
  6. Trace32 加载高通 ramdump
  7. python selenium 键盘操作 常用
  8. element-ui安装失败解决方法
  9. Element is missing end tag
  10. re学习笔记(65)BUUCTF - re - [GKCTF2020]Chellys identity
  11. 小程序开发可以用什么语言?
  12. 信息安全 数据赛 铁人三项_2018.5.18信息安全铁人三项赛数据赛题解
  13. 1+1≠2 |A/B 测试中的赢者诅咒
  14. 宝宝巴士:一家披着教育公司外皮的广告商?
  15. 【归并排序】【洛谷】【P1309-瑞士轮】
  16. 一个月瘦10斤的计划
  17. 微信公众号怎么推送消息_微信公众号发送消息
  18. 单片机课程设计-基于单片机直流电机控制器设计
  19. maven 指令之package 和install的区别
  20. Tableau 表计算函数

热门文章

  1. php 判断同时存在英文跟数字,php判断输入是否是纯数字,英文,汉字的方法
  2. java应用程序多态_java – 多态和n层应用程序
  3. thinkphp mysql exp_thinkphp备份数据库的方法分享
  4. 蓝桥杯基础练习1-15(python)
  5. aop判断方法是否执行成功_判断图中是否有环的三种方法
  6. oracle 设置输出显示中文乱码,修改oracle当前会话的语言环境,解决oracle显示中文乱码的问题 | 信春哥,系统稳,闭眼上线不回滚!...
  7. php项目中sql,php – 大括号{}在SQL查询中做了什么?
  8. 简述oracle数据库特殊状态,【OracleDB】 01 概述和基本操作
  9. java值栈_Struts2 中的值栈是什么?
  10. linux命令中的cp,Linux高级技术:关于cp命令中拷贝所有的写法