`
edwardpro
  • 浏览: 311928 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

gson使用感受

阅读更多

google的东西向来以简洁唯美gson也是如此:

 

private static Gson gson = new GsonBuilder().setDateFormat(
			"yyyy-MM-dd HH:mm:ss").disableHtmlEscaping().create();
 

接下来:

 

return gson.toJson(src);
return gson.fromJson(json, clazz);

 分别是变成json或者来自json,是不是相当简单?

 

不过在使用当中也发现一些问题,当然也许是我不会用,就是fromjson有些问题,主要来自于:

 

new TypeToken<List<Long>>

 

在fromJson时需要指定类型,如果不指定类型,对于复杂对象转换不指定类型就会报错的,实际上按照我的理解,完全可以理解gson为String和String和Collection(String)转换(注意json中其实还是有数字类型的,这里只是方便期间我觉得这么搞),但是很可惜gson是不会自动调用对象的toString的,也因此必须要指定类型,但这样对bean就会有一个重大限制,比如你的bean中所有对象的类型是要统一的,比如:

 

type = new TypeToken<Map<String, String>>() {
			}.getType();

 这里构造了一个一个json到string,string的map对象,然后再通过beanutil得到bean

type = new TypeToken<List<Map<String, String>>>() {
			}.getType();
			List<T> ret = new ArrayList<T>();
			List<Map<String, String>> tempObj = gson.fromJson(json, type);
			for (Map<String, String> item : tempObj) {
				try {
					T obj = clazz.newInstance();
					for (String key : item.keySet()) {
						String value = item.get(key);
						BeanUtils.setProperty(obj, key, value);
					}
					ret.add(obj);
				} catch (InstantiationException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				} catch (IllegalAccessException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				} catch (InvocationTargetException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
 这个方法看起来有点sb但是似乎试了半天也只能如此,不知道是不是我文档没有详尽的原因,这个留在以后再找答案了.
分享到:
评论
4 楼 u010503822 2017-02-28  
不懂这个是否是你需要的
// map转Json数据  json转换map
private static void mapToJson() {
Map<String, String> map = new HashMap<String, String>();
map.put("id", "1");
map.put("name", "zhangsan");

Gson gson = new Gson();
String json = gson.toJson(map);
System.out.println(json);

HashMap<String, String> m = gson.fromJson(json, new TypeToken<HashMap<String, String>>(){}.getType());
Set<Entry<String,String>> entrySet = m.entrySet();
for (Entry<String, String> entry : entrySet) {
String k = entry.getKey();
String v = entry.getValue();
System.out.println(k+"===="+v);
}


}
3 楼 quaff 2009-06-24  
对field序列化而不是对getter序列化,这是个限制
2 楼 QMax 2009-06-24  
我们在项目中也试着用了一下,发现有个问题,如果是一个很长的String(大概1M多),在toJson的时候,因为要替换字符,会非常费资源,CPU基本就是100%,处理时间也很长。试了几个其他的Json第三方包,也都有类似的问题。
不知道有没有人有什么好办法。

1 楼 mikeandmore 2009-06-13  
和python的simplejson一样啊

相关推荐

    安卓期末课程设计、一款仿学习i强国的强国通App 包含源代码、使用手册和心得体会

    这需要掌握JSON解析(如Gson库)、网络请求库(如Retrofit或Volley)以及Adapter和RecyclerView的使用,用于动态加载和显示列表数据。 4. **答题系统**:答题功能可能涉及到数据库操作,存储题目和答案,以及用户...

    安卓期末课程设计、一款刷小视频的App 包含源代码、使用手册和心得体会

    5. **网络请求**:获取视频内容、用户信息等数据需要网络请求,可以使用OkHttp或Retrofit库,处理JSON数据使用Gson或Jackson库。 6. **界面导航**:Android中的Activity和Fragment管理各个界面,使用Navigation组件...

    安卓期末课程设计、一款大学生今日校园App 包含源代码、使用手册和心得体会

    6. **JSON解析**:与服务器交换数据通常采用JSON格式,因此开发者需要理解JSON数据结构,并使用Gson或Jackson库将其转换为Java对象。 7. **事件监听与响应**:在用户操作(如点击按钮)时,需要响应并执行相应的...

    SpringMVC 学习总结

    处理 JSON 数据通常需要 Jackson 或 Gson 这样的库来序列化和反序列化。在 Controller 方法中,可以使用 @RequestBody 将 JSON 请求体映射到一个对象,而使用 @ResponseBody 将结果对象转换成 JSON 返回给客户端。 ...

    android 学习心得

    - **数据解析**:使用JSON解析库(如Gson、Jackson)解析服务器返回的数据。 - **异步处理**:使用 `AsyncTask` 或 `ExecutorService` 等方式处理网络请求,避免阻塞主线程。 ### 十、Android Animation学习笔记 -...

    ANDROID STUDIO 个人学习笔记

    - 笔记是作者在Android Studio 3.2版本上进行安卓开发学习时遇到的问题记录,涵盖三个多月的学习心得。 2. Android颜色设置 - 学习如何在Android应用中设置和使用颜色,颜色的定义和应用是Android UI设计的基本...

    android实现仿今日头条

    数据通常以JSON格式传输,需要使用Gson或Jackson库进行解析。此外,为了提高用户体验,可使用AsyncTask或Retrofit的异步回调来处理后台任务,避免UI线程阻塞。 接着,**滑动刷新与下拉加载**是现代App常见的特性。...

    Android聊天机器人报告,项目背景+开发环境+详细设计+运行演示+心得体会,8596字论文,图文并茂,满分课程设计!

    我们将综合运用多种技术,包括SQLite数据库、HttpURLConnection、ListView、GSON以及SharedPreferences等,以实现数据存储、网络请求和用户界面的交互。在应用的开发过程中,我们将着重考虑以下几个关键点: 1. 注册...

    常用jar包补充

    描述中的“博文链接:https://xiaoyongxin.iteye.com/blog/226836”表明这可能是一个博主分享的关于常用jar包的详细解析或者使用心得,但由于无法直接访问该链接,我们将基于一般的jar包使用场景进行阐述。...

    快捷查话费,套餐的Android小应用--移动话费速查,新增联通版话费速查

    在解析返回的数据时,可能会使用到Gson、Jackson或者内置的XmlPullParser等工具。 至于“工具”标签,表明这款应用是一个实用工具,旨在帮助用户解决实际问题,即快速查询话费。这类应用通常需要简洁直观的用户界面...

    Android美团界面

    - 解析JSON数据,可能使用`Gson`或`Jackson`库,将数据模型化并填充到UI组件中。 6. **性能优化**: - 对图片进行压缩处理,防止内存泄漏和卡顿,可使用`Glide`的内存和磁盘缓存机制。 - 使用`DiffUtil`计算列表...

    Android-Diycode社区Android客户端

    这个客户端提供了丰富的功能,让使用者能够轻松地在Diycode社区上交流技术、分享心得、提问解答,以及关注感兴趣的话题和用户。在这个项目中,我们可以深入学习Android应用开发的相关知识,包括但不限于以下关键点:...

    基于Android技术的音乐论坛APP源码+说明文档

    6. JSON解析:使用Gson或Jackson库进行JSON序列化和反序列化,将服务器返回的数据转换为Java对象。 7. 数据缓存策略:可能包括内存缓存和磁盘缓存,如使用LruCache或DiskLruCache提高用户体验。 8. 权限管理:...

    基于springboot的美食分享管理平台(部署文档+表结构文档) Javaee项目,springboot项目

    - JSON序列化和反序列化,通常使用Jackson或Gson库,便于前后端交互。 3. **数据库集成** - SpringData JPA提供了对ORM框架(如Hibernate)的高级抽象,简化了数据库操作。 - 数据库连接池,如HikariCP或Druid,...

    android新浪微博

    3. **JSON解析**:微博API返回的数据通常是JSON格式,开发者需要使用Gson、Jackson或org.json等库进行解析。 4. **Android UI设计**:运用布局(LinearLayout、RelativeLayout、ConstraintLayout等)、自定义View、...

    andriod入门心得

    这篇博客“Android入门心得”将带我们走进Android的世界,分享作者在学习过程中的一些经验和技巧。虽然没有具体的描述内容,但我们可以根据标题和标签来推测文章可能涉及的关键知识点。 首先,“源码”这个标签暗示...

    非常有用的java尝试

    11. **XML和JSON解析**:处理XML和JSON格式的数据,如DOM、SAX解析XML,使用Jackson或Gson处理JSON。 12. **单元测试**:JUnit的使用,编写和运行单元测试。 13. **注解**:了解Java注解的使用,如@Override、@...

    获取新闻java程序

    2. **HTML/JSON解析**:Java提供了许多库来解析网页内容,如Jsoup用于HTML解析,Jackson或Gson用于JSON解析。这些库可以帮助开发者从复杂的网页结构中提取所需的数据。 3. **数据存储**:抓取到的新闻数据需要被...

    Android项目搜索关键字飞入飞出效果.rar

    这种效果通常用于搜索框的建议关键词展示,使用户在输入时感受到生动的交互。 1. **关键词动画效果** - 飞入飞出动画是Android UI设计中的常见特效,它可以吸引用户的注意力并增加趣味性。在这个项目中,当用户在...

    防京东界面

    在Android开发中,界面设计是一项关键任务,它直接影响到用户的使用感受和产品的吸引力。防京东界面项目可以帮助开发者了解和掌握以下关键知识点: 1. **布局管理器**:在Android中,我们通常使用LinearLayout、...

Global site tag (gtag.js) - Google Analytics