一、序言
JSON 数据的书写格式是:名称/值,因为json具有鲜明的格式,我们常用它来作为数据传输载体。我们在项目中经常会把从数据库得到的数据转成json格式传到前台,接收后进行解析,下面这个是我写的一个工具类,利用反射将对象中的属性,值 并转为json格式。
二、实现背景
在项目代码进行编写时,会经常使用json格式的数据进行数据传递,但是使用jsonArray的话都需要再重新转成string类型,如果需要大量的json数据的话会造成大量的资源浪费,因此编写了一个直接转换成string类型的json工具类。
三、实现方式
/** * @描述 将list数组转为json格式 * @param buffer * @param list * @return * @throws IllegalArgumentException * @throws IllegalAccessException */ private static StringBuffer listTojson(StringBuffer buffer,List list) throws IllegalArgumentException, IllegalAccessException{ //遍历传过来的list数组 for (Object object : list) { //判断遍历出的值是否为空 if (object == null) { buffer.append(","); } else{ Class<? extends Object> class1 = object.getClass(); String simpleName = class1.getSimpleName(); if(simpleName.equals("String")){ buffer.append("\""+object.toString()+"\","); } else if(simpleName.equals("Boolean")||simpleName.equals("Integer")||simpleName.equals("Double")||simpleName.equals("Float")||simpleName.equals("Long")){ buffer.append(""+object.toString()+","); } else if(simpleName.equals("Date")){ Date date = (Date) object; SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); String simdate = simpleDateFormat.format(date); buffer.append(""+simdate+","); } else{ Class<? extends Object> class2 = object.getClass(); Field[] fields = class2.getDeclaredFields(); Field.setAccessible(fields, true); buffer.append("{"); //遍历对象中的所有字段获取字段值和字段名称拼成json字符串 for (Field field : fields) { Object fieldobj = field.get(object); String fieldName = field.getType().getSimpleName(); if(fieldobj == null){ if(fieldName.equals("String")) { buffer.append("\""+field.getName()+"\":\"\","); } else{ buffer.append("\""+field.getName()+"\":null,"); } } else{ String fsimpleName = fieldobj.getClass().getSimpleName(); if(fsimpleName.equals("String")){ buffer.append("\""+field.getName()+"\":\""+field.get(object)+"\","); } else if(fsimpleName.equals("Boolean")||fsimpleName.equals("Integer")||fsimpleName.equals("Double")||fsimpleName.equals("Float")||fsimpleName.equals("Long")){ buffer.append("\""+field.getName()+"\":"+field.get(object)+","); } else if(fsimpleName.equals("Date")){ Date date = (Date) object; SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); String simdate = simpleDateFormat.format(date); buffer.append("\""+field.getName()+"\":"+simdate+","); } else{ buffer = beanTojson(fieldobj, buffer).append(","); } } } buffer = new StringBuffer(""+buffer.substring(0,buffer.length()-1)+""); buffer.append("},"); } } } buffer = new StringBuffer(""+buffer.substring(0,buffer.length()-1)+""); buffer.append("]"); return buffer; }
/** * @描述 将集合转为json格式的字符串 * @param obj * @return * @throws IllegalArgumentException * @throws IllegalAccessException */ private static String collectionTojson(Object obj) throws IllegalArgumentException, IllegalAccessException{ //定义一个StringBuffer类型的字符串 StringBuffer buffer = new StringBuffer(); buffer.append("["); Class<? extends Object> clazz = obj.getClass(); //获取类中所有的字段 Field[] declaredFields = clazz.getDeclaredFields(); //设置可以获得私有字段的value Field.setAccessible(declaredFields, true); //定义全局变量 boolean listf = false; boolean setf = false; Set<Object> set = null; List<Object> list = null; //遍历获取到的所有字段 for (Field field : declaredFields) { //getDeclaringClass()同getClasses(),但不局限于public修饰,只要是目标类中声明的内部类和接口均可 String simpleName = clazz.getSimpleName(); //判断获取到的类型 if(simpleName.equals("ArrayList")||simpleName.equals("LinkedList")){ list = (List<Object>) obj; listf=true; } if(simpleName.equals("HashSet")||simpleName.equals("TreeSet")){ set = (Set<Object>) obj; setf=true; } } //如果获取的对象类型为一个List集合 if(listf == true){ return listTojson(buffer, list).toString(); } //如果获取的对象类型为一个Set集合 if(setf == true){ buffer = setTojson(set, buffer); } buffer.append("]"); return buffer.toString(); }从中截取了两段,实现理念就是通过字符串拼接以及递归的方式,将全部的值获取到,并拼接成json字符串的样式,。
后面带有jar包以及源码,求大神指点
相关推荐
标题 "C语言实现的 json格式字符串与结构体自动相互转化" 涉及到的核心知识点是C语言编程、JSON解析和结构体操作。C语言是一种底层编程语言,通常用于系统编程、嵌入式开发等领域,而JSON(JavaScript Object ...
在给定的“利用java反射将json字符串转成对象”的主题中,我们将深入探讨如何借助反射机制将JSON字符串转换为Java对象。 首先,我们需要了解JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人...
`toJson()`方法接受一个Java对象,并将其转换为JSON格式的字符串。 ### 自定义序列化与反序列化 有时,JSON结构可能与Java对象不完全匹配,这时可以自定义序列化和反序列化的逻辑。Gson提供了`@JsonAdapter`注解...
本文将详细介绍如何利用Java反射机制来实现JavaBean对象到JSON字符串的转换,并提供具体的示例代码。 #### 二、Java反射机制简介 Java反射机制允许程序在运行时访问类的信息,包括字段、构造函数以及方法等。通过...
本文将深入探讨如何利用Jackson库实现Java对象与JSON字符串的互转,同时也会涉及一些源码解析和实际应用中的技巧。 Jackson库由 FasterXML 组织开发,它的核心组件包括`Jackson-databind`,`Jackson-core`和`...
本话题将深入探讨如何利用Java反射机制将List对象转换为JSON格式。 在Java中,JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。在处理数据传输或存储...
JSON格式的数据结构简单明了,主要分为对象、数组、字符串、数字、布尔值以及特殊值null。这些元素构成了JSON的基础,使得不同语言间的数据交换变得简单。 在Java中,对象到JSON的转换需求几乎无所不在。无论是将...
- `OneObjectToJson`方法将单个对象转换为JSON格式的字符串。 - `toJson`方法接收一个`List<object>`,将其转换为JSON数组。首先,确定数组的类型名称(即`Class1`的类型名),然后遍历`List<object>`中的每个对象...
通过RTTR,我们可以获取类的成员变量、方法、构造函数和属性,甚至可以创建和销毁对象实例,这对于实现序列化和反序列化非常有用,特别是将C++的对象转换为JSON格式。 JSON(JavaScript Object Notation)是一种轻...
我们可以使用诸如Jackson、Gson、Fastjson等流行的JSON库来解析这个字符串,将其转化为JSON对象。 2. **获取Java Bean类信息**:利用反射API,通过`Class.forName()`方法获取Java Bean类的Class对象。这需要知道...
在Java中,我们可以利用反射API来实现这个过程。 1. **反序列化**:将JSON字符串转换为Map。这个过程通常涉及到解析JSON字符串,然后根据JSON结构创建对应的Map。使用反射,我们可以动态地创建和设置类的属性,这在...
通过上述知识点的解析,我们可以看到,Java反射机制不仅在编写框架或库时非常重要,它同样可以用于日常的开发任务中,比如在需要将Java对象转化为JSON格式进行数据交换的场景。文档中给出的实例代码展示了如何利用...
### Json处理工具类知识点 #### 一、简介 在Java编程中,经常需要对JSON数据进行解析、构建或...此外,还介绍了如何利用`Gson`库将Java对象序列化为JSON字符串。这对于处理Web服务返回的数据或构建HTTP请求非常有用。
在实际操作中,我们可以通过以下方式创建Gson实例,并利用它来将Java对象转换为JSON字符串: ```java Gson gson = new GsonBuilder() .registerTypeAdapter(java.sql.Date.class, new SQLDateSerializer()) ....
- **Java对象转JSON字符串**:将Java对象转化为JSON格式的字符串,以便于在网络间传输或存储。 - **集合和数组转化**:支持List、Set、Array等集合类型的转化。 - **Map转化**:可以将Map对象转化为JSON对象,反之...
3. 遍历列表中的每一个元素,利用反射获取元素的所有属性,并将它们转换为JSON格式。 4. 将所有元素封装在一个JSON数组中,并返回完整的JSON字符串。 #### 六、总结 综上所述,`DataSerialHelper`类提供了一组实用...
- 序列化Java对象:将Java对象转换为JSON格式的字符串,以便在网络上传输或保存到文件中。 - 转换数据类型:在JSON数据与Java对象之间进行数据类型的转换,例如将JSON字符串转为整数或日期。 - 遍历和操作JSON结构:...
JSON对象由键值对组成,键是字符串,值可以是各种数据类型,包括字符串、数字、数组、对象等。在Java中,我们通常使用`org.json`库或`com.google.gson`库来解析和创建JSON对象。 以`org.json`库为例,我们可以使用`...