`

//json 实体互转, list json互转 ,List<实体> 转List<Object> , List<Objcet> 转List<Map>

 
阅读更多
package mission;

//json 实体互转, list json互转 ,List<实体> 转List<Object> , List<Objcet> 转List<Map>          使用alibaba的json工具包

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;

import java.beans.BeanInfo;
import java.beans.IntrospectionException;
import java.beans.Introspector;
import java.beans.PropertyDescriptor;
import java.lang.reflect.InvocationTargetException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

/**
 * Created by chengda on 2017/2/23.
 */
public class JsonTest {

	public static void main(String[] args) {
		List<Brand> brandList = new ArrayList<Brand>();
		Brand b = new Brand();
		b.setId(1);
		b.setName("测试");
		b.setStatus(false);
		Brand b1 = new Brand();
		b1.setId(2);
		b1.setName("测试2");
		b1.setStatus(false);
		Brand b2 = new Brand();
		b2.setId(3);
		b2.setName("测试3");
		b2.setStatus(false);

		brandList.add(b1);
		brandList.add(b2);
		brandList.add(b);

		/**
		 * 实体转为json String 字符串
		 */
		String s = JSONObject.toJSONString(b);
		System.out.println(s);

		/**
		 * json String 字符串 转为 JSONObject 
		 */
		JSONObject ss = JSONObject.parseObject(s);
		System.out.println(ss.getBooleanValue("status"));

		/**
		 * JSONObject  转为  String 
		 * String 转为 Map 
		 */
		String sss = JSON.toJSONString(ss);
		Map maps = JSONObject.parseObject(sss, Map.class);
		for(Object object : maps.keySet()) {
			System.out.println("key=" + object + " value=" + maps.get(object));  
		}
		
		
		/**
		 *
		 * json转为实体
		 */
		Brand brand = JSONObject.parseObject(s, Brand.class);
		System.out.println(brand + "==============");

		/**
		 *
		 * list集合转json
		 */
		String s1 = JSON.toJSONString(brandList);
		System.out.println(s1 + "999999");
		// json 转list
		List<Brand> brands = JSONObject.parseArray(s1, Brand.class);
		System.out.println(brands);

	}

	/**
	 * List<实体>转为list<Object>
	 *
	 * @param t
	 * @return
	 */
	public List<Object> beanToObject(List<?> t) {
		List<Object> o = new ArrayList<Object>();
		Iterator<?> it = t.iterator();
		while (it.hasNext()) {
			o.add(it.next());
		}

		return o;
	}

	/**
	 * List<objcet> 转为List<Map>
	 *
	 * @param object
	 * @return
	 * @throws Exception
	 */
	public List<Map> beanToMap(List<Object> object) throws Exception {
		List<Map> maps = new ArrayList<Map>();
		for (Object o : object) {
			String s = JSON.toJSONString(o);
			Map map = JSONObject.parseObject(s, Map.class);

			maps.add(map);
		}
		return maps;
	}


	/**
	 * map 转 实体
	 */
	public static <T> T toBean(Class<T> clazz, Map map) {
		T obj = null;
		try {
			BeanInfo beanInfo = Introspector.getBeanInfo(clazz);
			obj = clazz.newInstance(); // 创建 JavaBean 对象

			// 给 JavaBean 对象的属性赋值
			PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors();
			for (int i = 0; i < propertyDescriptors.length; i++) {
				PropertyDescriptor descriptor = propertyDescriptors[i];
				String propertyName = descriptor.getName();
				if (map.containsKey(propertyName)) {
					// 下面一句可以 try 起来,这样当一个属性赋值失败的时候就不会影响其他属性赋值。
					Object value = map.get(propertyName);
					if ("".equals(value)) {
						value = null;
					}
					Object[] args = new Object[1];
					args[0] = value;
					try {
						descriptor.getWriteMethod().invoke(obj, args);
					} catch (InvocationTargetException e) {
						System.out.println("字段映射失败");
					}
				}
			}
		} catch (IllegalAccessException e) {
			System.out.println("实例化 JavaBean 失败");
		} catch (IntrospectionException e) {
			System.out.println("分析类属性失败");
		} catch (IllegalArgumentException e) {
			System.out.println("映射错误");
		} catch (InstantiationException e) {
			System.out.println("实例化 JavaBean 失败");
		}
		return (T) obj;
	}
}

    

public static final Object parse(String text); // 把JSON文本parse为JSONObject或者JSONArray 
public static final JSONObject parseObject(String text); // 把JSON文本parse成JSONObject    
public static final <T> T parseObject(String text, Class<T> clazz); // 把JSON文本parse为JavaBean 
public static final JSONArray parseArray(String text); // 把JSON文本parse成JSONArray 
public static final <T> List<T> parseArray(String text, Class<T> clazz); //把JSON文本parse成JavaBean集合 
public static final String toJSONString(Object object); // 将JavaBean序列化为JSON文本 
public static final String toJSONString(Object object, boolean prettyFormat); // 将JavaBean序列化为带格式的JSON文本 
public static final Object toJSON(Object javaObject); 将JavaBean转换为JSONObject或者JSONArray。

 

分享到:
评论

相关推荐

    object转化为时间类型

    ### 在C#中将Object转换为时间类型 在C#编程语言中,经常需要处理不同类型的数据,尤其是在处理日期和时间时。本篇文章将详细介绍如何将一个`object`类型的变量安全地转换为`DateTime`类型,并解释相关的代码实现...

    序列化Hashtable

    ia &lt; a.Count; ia++) { Write1_Object(@&quot;anyType&quot;, @&quot;&quot;, ((System.Object)a[ia]), true, false); }WriteEndElement();对于集合类,在XML序列化过程中都是要如上所述来写XML的,显然的,对于...

    object-c 与 js 简单交互demo

    这个"object-c 与 js 简单交互demo"提供了一个基础示例,帮助开发者了解如何在原生Objective-C代码中调用JavaScript函数以及反之。下面将详细讲解这一交互过程。 1. **WKWebView**: 交互的基础是WebKit框架中的`...

    BOM browser objcet model.docx

    浏览器对象模型(BOM,Browser Object Model)是JavaScript与浏览器交互的一种方式,它定义了浏览器窗口中的各种对象,包括文档、导航、历史记录等。学习BOM,实际上就是理解和操作`window`对象及其子对象。 在BOM...

    django model object序列化实例

    在Python的Django框架中,序列化是一种将数据对象转换为可传输或存储格式的过程,通常用于将数据库中的模型对象转换为JSON、XML等格式。本文将深入探讨如何对Django Model对象进行序列化,特别是在处理单个实例时...

    HQL经典查询语句[文].pdf

    object[] p = (objcet[])iterator.next(); String name = p[0]; Integer cout = p[1]; } ``` 2. 按客户分组,统计每个客户的订单数量: ```java Iterator iterator = session.createQuery("select c.id ,c....

    C#泛型参数多线程与复杂参数多线程2

    最近用多线程用的比较多自己...毕竟从泛型类型传入参数向上转型的objcet类型的参数调用带参的多线程很容易,而将object类型还原成泛型却很难。 复杂参数的多线程,如果方法带有参数ref或out就不能使用带参数的多线程。

    C#泛型参数多线程与复杂参数多线程

    最近用多线程用的比较多自己...毕竟从泛型类型传入参数向上转型的objcet类型的参数调用带参的多线程很容易,而将object类型还原成泛型却很难。 复杂参数的多线程,如果方法带有参数ref或out就不能使用带参数的多线程。

    PowerDesigner16.5中文教程-数据库模型操作教程.docx

    面向对象模型 (OOM) 〔OBJCET ORIENTED MODEL〕** 面向对象模型(OOM)是一种将现实世界中的事物抽象成对象的方法。在数据库设计中,OOM主要用于支持面向对象编程语言的数据库系统。这种模型强调类、对象、继承等...

    深入Java关键字null

    - **Map**:键(`key`)最多只能包含一个`null`元素,而值(`value`)则可以包含任意数量的`null`元素。 - **数组**:基本类型数组,如果定义后没有显式地赋初值,则Java会自动给它们赋值;对于引用类型数组,如果没有...

    RxObjC:用于 Objective-C 的 ReactiveX

    RxObjC:Objective-C 的 ReactiveX ... pod 'RxObjC', '~&gt; 1.0' end # RxTests and RxBlocking make the most sense in the context of unit/integration tests target 'YOUR_TESTING_TARGET' do pod 'RxBlocking',

    iphone开发比较实用,object-c注意事项,能提高不少

    在iOS应用开发中,Objective-C(简称ObjC)是苹果平台的主要编程语言,尤其是在iPhone开发中。虽然现在Swift已经越来越流行,但Objective-C仍然在许多现有项目和开发者中占据重要地位。以下是一些关于Objective-C的...

    gradle 搭建简单项目

    如果它是代码的一部分,可能需要检查其类型(如`.java`或`.json`)并将其放入项目结构中相应的位置。 在实际项目中,这些SQL文件可能需要被集成到Gradle构建流程中,例如使用`flyway`或`liquibase`插件来进行数据库...

    VC6配置WDK7600

    同时,在General的Objcet/Library modules中指定驱动所需的库文件,例如Kernel32.lib等。 完成上述步骤后,你就可以在VC6环境中编译和调试驱动程序了。值得注意的是,配置过程中要确保路径的准确性,因为WDK的安装...

    JavaScript深拷贝和浅拷贝概念与用法实例分析

    js中的浅拷贝和深拷贝,只是针对复杂数据类型(Objcet,Array)的复制问题。简单来讲浅拷贝和深拷贝都可以实现在原有对象的基础上再生成一份的作用。但是根据新生成的对象能否影响到原对象可以分为浅拷贝和深拷贝。 ...

Global site tag (gtag.js) - Google Analytics