Android Sqite数据库 6

想来想去又坑爹了,数据保存到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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/575536.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

jqgrid 列表条件查询的几步关键操作

jqgrid列表条件查询 记录一下我自己老忘的几个点 这次记录一下使用jqgrid在列表查询时的关键点&#xff0c;过一段时间不用就是忘 1】在html页面用 v-model“q.xxx” xxx是在js处定义。 2】这是js里 在jqgrid查询列表时的模块使用postData 承载参数 3】 这是在定义vue对象时…

对计算机考研的认识

发信站: 北邮人论坛 (Wed Jun 1 15:09:43 2011), 站内 不在写具体的调剂问题&#xff0c;以免大家再骂我。只客观说明一下对计算机考研的看法。供后来人参考。 首先计算机考研是统考&#xff0c;所以大家不要在各个论坛问学校有没有辅导班之类的话题。其次&#xff0c;统…

radio 取值赋值 亲测有用实效

$(“input[name‘protocolType’][checked]”).val(); 取值 $(“input[name‘radioName’][value2]”).attr(“checked”,true); 赋值 注意 广泛搜到 $(“input[name‘radioName’][valuetest]”).attr(“checked”,true); 好像不及时起到作用

wireshark: there are no interfaces on which a capture can be done

权限问题&#xff0c;简单的直接sudo就行。 更安全的做法是&#xff1a; # chmod 4755 /usr/bin/dumpcap dumpcap的所在目录可用whereis命令查看。 转载于:https://www.cnblogs.com/duanguyuan/p/3628569.html

初识:windows下的免费 ssh 客户端工具

如果你的操作系统是 Windows&#xff0c;而你想要连接 Linux 服务器相互传送文件&#xff0c;那么你需要一个简称 SSH 的 Secure Shell 软件。实际上&#xff0c;SSH 是一个网络协议&#xff0c;它允许你通过网络连接到 Linux 和 Unix 服务器。SSH 使用公钥加密来认证远程的计算…

iOS开发之通知中心(NSNotificationCenter)

前言 面向对象的设计思想是把行为方法封装到每一个对象中&#xff0c;以用来增加代码的复用性。正是这种分散封装&#xff0c;增加了对象之间的相互关联&#xff0c;总是有很多的对象需要彼此了解以及相互操作&#xff01; 一个简单示例说明这种交互产生的对象之间的相互依赖&a…

基于AT89C51单片机的8位密码锁仿真与实物制作

点击链接获取Keil源码与Project Backups仿真图&#xff1a; https://download.csdn.net/download/qq_64505944/88657969?spm1001.2014.3001.5503 源码获取 C 源码仿真图毕业设计实物制作步骤01 摘要 在日常的生活和工作中, 住宅与部门的安全防范、单位的文件档案、财务报表…

笔记本 win7 装vs2010 报错 注册表 拒绝访问等

win7-64 本子 安装vs2010过程中&#xff1a; 弹框报错提示&#xff1a;错误写入注册表键&#xff1a;HKEY-CLASS-ROOTGSC RegSetValueEx 失败&#xff1b;代码5 拒绝访问 百度经验的注册表解决办法没试。手抖点了一下忽略竟然正常安装好了。。。。mpp

PuTTY配置

目录 1、作用&#xff1f; 2、中文问题解决 &#xff1f; 3、GUI支持&#xff1f; 4、使用密钥对实现安全快捷的无密码登陆? 5、操作习惯&#xff08;AltEnter全屏以及字体配置&#xff09; 6、附录&#xff08;sshd服务器配置&#xff09; 1、作用&#xff1f;PuTTY是一个Tel…

从无到有开发连麦直播技术点整理

最近在跟老师手下的项目&#xff0c;碰到流媒体&#xff0c;流媒体服务器&#xff0c;视频编码技术&#xff0c;推流&#xff0c;拉流等概念&#xff0c;看到本篇博客整理的概念很全面&#xff0c;很自信&#xff0c;故转发留存&#xff0c;感谢原博主。 关键字 采集、前处理、…

WPF: 使用CommandManager.InvalidateRequerySuggested手动更新Command状态

WPF判断命令&#xff08;Command&#xff09;是否能够执行是通过ICommand.CanExecute事件&#xff0c;在实际程序中路由命令一般是通过CommandBinding来使命令得到实际操作代码&#xff0c;但是这个CanExecute事件的调用是由WPF控制的&#xff0c;有些时候&#xff0c;比如命令…

从开发小白到音视频专家

音视频方面的技术博客&#xff0c;转发学习 作者&#xff1a;卢俊&#xff0c;七牛云客户端团队技术负责人。拥有丰富的音视频领域的开发和实战经验&#xff0c;先后开发过 Android 播放 SDK、Android 推流 SDK、短视频 SDK&#xff0c;并主导了七牛连麦系统的设计和实现。服务…

Android如果对APK进行加密,提高反编译难度(思路)

提高反编译难度的几种方式&#xff1a; 对于软件安全来说&#xff0c;有攻就要有防才对。不然&#xff0c;Android整个产业链就会被这样的Crack给毁掉。 第一种办法&#xff1a;将核心代码用JNI写进so库中。由于so库的反编译和破解的难度加大&#xff0c;所以这种方式防止反编译…

node-media-server win环境安装架测试 踩坑记

01 因为老师的项目中需要很多流媒体模块的东西&#xff0c;接触到 Node-Media-Server 这个流媒体服务器&#xff0c;这个国人开发的组件&#xff0c;之前还有SRS也是的。记录一下问题和效果。   本子是win7&#xff0c;之前还有装nodejs时版本的问题&#xff0c;这里插一曲&a…

UIScrollview 技巧

设置UIScrollView的contentSize 如果使用自动布局&#xff0c;那么它会自动帮你基于这个scrollview的子视图的约束来计算这个内容大小。在非自动布局情况下&#xff0c;如果app旋转导致scrollview 的bounds改变&#xff0c;不会影响到scrollview的contentSize&#xff0c;而如果…

markdown 编辑器 编辑字体样式(颜色 大小 字体等)

markdown编辑器   编辑改字体样式得用html标签这套东西&#xff0c;更改字体大小,字体&#xff0c;颜色。 即 <font></font> <font 语法> 你的内容 </font>语法&#xff1a;color#0099ff 更改字体颜色&#xff0c;颜色 写&#xff08;Red、#F…

【转】介绍几个图论和复杂网络的程序库 —— BGL,QuickGraph,igraph和NetworkX

原文来自&#xff1a;http://blog.sciencenet.cn/blog-404069-297233.html 作复杂网络研究离不开对各种实际或模拟网络的统计、计算、绘图等工作。对于一般性的工作&#xff0c;我们可以用Pajek、Netdraw和Ucinet等软件完成。但对一些特殊应用&#xff08;比如自己开发了一个新…

初识Node.js之Node.js与java作为后台服务器的对比

最近去了新公司&#xff0c;又拾起了被我抛下许久的后端了&#xff0c;不过因为公司的需求&#xff0c;后端采用Node.js&#xff0c;最近一直在学习Node.js,随着逐渐深入的了解&#xff0c;发现真的Node.js能越来越变得热门是有其存在的道理的。可能有人会说&#xff0c;Java作…

SQL生成日期维度(到小时)

#建表语句&#xff1a; CREATE TABLE [dbo].[Dim_日期3]([日期3ID] [varchar](10) NOT NULL,[年] [int] NULL,[半年] [varchar](6) NULL,[季] [varchar](2) NULL,[月] [varchar](4) NULL,[周] [varchar](6) NULL,[星期] [varchar](6) NULL,[是否周末] [varchar](4) NULL,[日] […

NiFi导出自己模板和导入别人模板

NiFi导出模板 进入nifi系统后&#xff0c;选择自己想要导出的流程或者组&#xff08;支持group作为模板导出&#xff09; 点击空白处&#xff0c;右键选择create template 模板文件下载成功 NiFi导入模板 点击空白处&#xff0c;右键选择upload template 查看导入结…