文档章节

json转任意pojo

coder4j
 coder4j
发布于 2016/02/14 01:21
字数 655
阅读 19
收藏 0
点赞 1
评论 0

纯粹记录。

在定义消息体的时候想到一个业务,就是将消息(体json格式)和消息对象绑定起来。其实业务量不大的时候也没必要定义一个pojo来表示一条消息,json转个map也无所谓,但是用户信息多了单纯一个map不好解决,因此我还是花了点时间定义了一个json转任意pojo的工具,也方便以后用。

需要添加json解析工具

<dependency>

    <groupId>org.json</groupId>

    <artifactId>json</artifactId>

    <version>20140107</version>

</dependency>

实现过程设计反射API,别的就没啥了。

下面是具体实现,实现中也包含了json转map,list等等

package com.github.echo.common;

import
org.json.JSONArray;
import
org.json.JSONObject;

import
java.lang.reflect.Field;
import
java.util.ArrayList;
import
java.util.HashMap;
import
java.util.List;
import
java.util.Map;

public class
JsonHelper<T> {
 
  /**
   * json
转换为map
   * @param
json
   
* @return
   */
 
public Map<String,Object> json2Map(String json){
     Map<String,Object> result = new HashMap<String, Object>();
     
JSONObject object = new JSONObject(json);
     for
(String key:JSONObject.getNames(object)){
        result.put(key, object.get(key));
     
}
     return result;
 
}
 
  public List<Map<String,Object>> json2List(String json){
     List<Map<String,Object>> result = new ArrayList<Map<String,Object>>();
     
JSONArray array = new JSONArray(json);
//    Iterator<Object> it = array.iterator();
     
for(int i=0;i<array.length();i++){
        result.add(json2Map((array.get(i)).toString()));
     
}
//    while(it.hasNext()){
//       result.add(str2Map(((JSONObject) it.next()).toString()));
//    }
     
return result;
 
}
  /**
   * map
转换为json
   * @param
map
   
* @return
   */
 
public JSONObject map2Json(Map<String,Object> map){
     JSONObject object = new JSONObject();
     for
(String key:map.keySet()){
        object.put(key, map.get(key));
     
}
     return object;
 
}
  /**
   * list<map>
转换为json
   * @param
list
   
* @return
   */
 
public JSONArray list2Json(List<Map<String,Object>> list){
     JSONArray array = new JSONArray();
     for
(Map<String,Object> map:list){
        array.put(map2Json(map));
     
}
     return array;
 
}
  /**
   *
字符串转换成JSON
   * @param
str
   
* @return
   */
 
public JSONObject str2JsonObject(String str){
     return new JSONObject(str);
 
}
 
  public JSONArray str2JsonArray(String str){
     return new JSONArray(str);
 
}

  /**
   * json
到任意pojo的转化
   
* @param json
   
* @param clazz
   
* @return
   */
 
public T json2Pojo(String json,Class<T> clazz){
     Field[] filds = clazz.getDeclaredFields();
     
Map<String,Object> map = json2Map(json);
     try
{
        T t = clazz.newInstance();
        for
(Field f:filds){
           f.setAccessible(true);
           if
(map.containsKey(f.getName())){
              f.set(t,map.get(f.getName()));
           
}
        }
        return t;
     
} catch (Exception e) {
        e.printStackTrace();
        return null;
     
}
  }
}

核心在最后一个方法 json2Pojo。做法也很简单就是遍历要生成类的属性列表,然后把json字符串先变成结构化的map,然后一步步赋值最后返回实例就行了。这里牵扯了反射的知识我也是现学现翻的API。。。

 

"{\"sender_id\":\"sl3dv0ds9cax9s\",\"to_id\":\"14378600215406\",\"message\":\"噜啦啦噜啦啦噜啦噜啦嘞!\"}";

 给一枚json测试用。。

当然这样做好处是使用方便,解析方便,有bean做管理简单了很多。

坏处就是反射造成性能极差,测试结果光生成bean就花了大概27毫秒(查询300条数据库数据的时间还多)。

当然这里涉及的反射只是冰山一角,其实影响程度不会那么糟糕,适当利用这些机制会对给编程带来很大便利。

© 著作权归作者所有

共有 人打赏支持
coder4j

coder4j

粉丝 20
博文 14
码字总数 24633
作品 0
朝阳
高级程序员
Gson把Java POJO和Json数据字符串之间相互转换

Gson把Java POJO和Json数据字符串之间相互转换 例如: POJO pojo = new POJO(); 输出: 04-19 14:05:29.528 25587-25587/zhangphil.test D/POJO转换为Json字符串: {"id":1,"name":"zhangphil......

zhangphil ⋅ 04/19 ⋅ 0

Shindig JAVA版本内部结构(译)

英文原文:http://rollerweblogger.org/roller/entry/shindigjavainternalsdiagramupdated Shindig JAVA版本内部结构 我发表第一篇和第二篇 Shindig JAVA版本工作原理之后,Shindig已经修改了...

newidea ⋅ 2010/01/20 ⋅ 0

action向页面传递数据,拦截那些没必要传到客户端的方法。includeProperties

如果action的属性很多,我们想要从Action返回到调用页面的数据。这个时候配置includeProperties或者 excludeProperties拦截器即可。而这2个拦截器的定义都在struts2的json-default包内,所以...

文文1 ⋅ 2015/09/22 ⋅ 0

使用Android API最佳实践

本文由 伯乐在线 - imesong 翻译自 meetme。欢迎加入Android小组。转载请参见文章末尾处的要求。 写在前面 现在,Android应用程序中集成第三方API已十分流行。应用程序都有自己的网络操作和缓...

mingxun ⋅ 2014/04/17 ⋅ 0

Java中int的各进制之间的转换

一、二、八、十、十六进制之间的转换 int n1 = 14; //十进制转成十六进制: Integer.toHexString(n1); //十进制转成八进制 Integer.toOctalString(n1); //十进制转成二进制 Integer.toBinary...

pricker ⋅ 2015/08/23 ⋅ 0

Android中流行的第三方库资源收集

1、GSON GSON是将JSON解析成POJO的Java库。GSON也可以将POJO解析成JSON。 2、OkHttp OKHttp是Android版Http客户端。非常高效,支持SPDY、连接池、GZIP和 HTTP 缓存。默认情况下,OKHttp会自动...

jdroid ⋅ 2014/05/02 ⋅ 0

安卓开发需不需要封装pojo对象

安卓开发需不需要封装pojo对象?公司的项目中没有封装pojo对象,而是为了和服务器进行json通信,都做成一个类中的各种json字符串,我以前 搞j2ee的,习惯了面向对象,习惯将需要的都封装成类...

bruceyong ⋅ 2014/11/03 ⋅ 3

PlainXML

Generating POJO by DTD; XML-POJO mapping via Java5 annotations or DTD; XML manipulations using POJO without SAX/DOM; Preprocessing of XML documents using expression language; Bi......

匿名 ⋅ 2008/09/09 ⋅ 0

Moco 0.10.2 发布,模拟服务器

Moco是什么? Moco是一个可以轻松搭建测试服务器的框架/工具/程序库。 toJson将普通Java对象转换成JSON文本用于应答。 json将普通Java对象转换成JSON文本用于请求匹配。 增加无端口的socketS...

dreamhead ⋅ 2015/09/09 ⋅ 0

springmvc学习笔记(22)-springmvc开发小结

springmvc学习笔记(22)-springmvc开发小结 标签: springmvc [TOC] 本文对springmvc系列博文进行小结 springmvc框架 前端控制器:接收request,进行response 处理器映射器:根据url查找Handl...

brianway ⋅ 2016/03/19 ⋅ 2

没有更多内容

加载失败,请刷新页面

加载更多

下一页

行政区划代码转为字典形式

原数据为: http://www.mca.gov.cn/article/sj/xzqh/2018/201804-12/201804-06041553.html 手动替换了一下格式,并使用下面的代码处理. # 输入格式s = """110000:北京市110101:东城区1101...

漫步海边小路 ⋅ 8分钟前 ⋅ 0

android apk 签名

创建key,需要用到keytool.exe (位于C:\Program Files\Java\jdk1.6.0_10\bin目录下),使用产生的key对apk签名用到的是jarsigner.exe (位于C:\Program Files\Java\jdk1.6.0_10\bin目录下),把...

国仔饼 ⋅ 17分钟前 ⋅ 0

springcloud+jps+mybatis多数据库配置

多数据库配置 配置我们目录结构设置: config ---datasource ----jpa ----mybatis ----redis Datasource中是数据的相关配置 Jap中是springDatajpa的相关配置 Mybatis中是mybatis的相关配置 ...

大-智-若-愚 ⋅ 24分钟前 ⋅ 0

Spring mvc HandlerMapping 实现机制

概述 当DispatcherServlet接受到客户端的请求后,SpringMVC 通过 HandlerMapping 找到请求的Controller。 HandlerMapping 在这里起到路由的作用,负责找到请求的Controller。 Spring MVC 默认...

轨迹_ ⋅ 28分钟前 ⋅ 0

JavaScript零基础入门——(十)JavaScript的DOM基础

JavaScript零基础入门——(十)JavaScript的DOM基础 欢迎大家回到我们的JavaScript零基础入门,上一节课,我们了解了JavaScript中的函数,这一节课,我们来了解一下JavaScript的DOM。 第一节...

JandenMa ⋅ 今天 ⋅ 0

Weex起步

本教程假设你已经在你的本地环境安装了node 其实weex起步教程在 https://github.com/lilugirl/incubator-weex 项目说明文件中都已经有了,但为了有些同学看到英文秒变文盲,所以这里我重新写...

lilugirl ⋅ 今天 ⋅ 0

Jenkins实践1 之安装

1 下载 http://mirrors.jenkins.io/war/latest/jenkins.war 2 启动 java -jar jenkins.war 前提:安装jdk并配置环境变量 启动结果节选: ************************************************......

晨猫 ⋅ 今天 ⋅ 0

组合数学 1-2000 中,能被6或10整除的数的个数

1--2000 中,能被6或10整除的数的个数 利用集合的性质 能被6整除的个数 2000/6 = 333 能被10整除的个数 2000/10 = 200 能被6和10整除的个数 2000/30 = 66 能被6或10整除的个数 333+200-66 =...

阿豪boy ⋅ 今天 ⋅ 0

一篇文章学懂Shell脚本

Shell脚本,就是利用Shell的命令解释的功能,对一个纯文本的文件进行解析,然后执行这些功能,也可以说Shell脚本就是一系列命令的集合。 Shell可以直接使用在win/Unix/Linux上面,并且可以调用...

Jake_xun ⋅ 今天 ⋅ 0

大数据工程师需要精通算法吗,要达到一个什么程度呢?

机器学习是人工智能的一个重要分支,而机器学习下最重要的就是算法,本文讲述归纳了入门级的几个机器学习算法,加大数据学习群:716581014一起加入AI技术大本营。 1、监督学习算法 这个算法由...

董黎明 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部