`

java 处理 简单对象的json格式互转

 
阅读更多
这个有点模仿于。google的json处理。
传进对象;传出json。
传进json;传出对象。
对于基本的简单对象例如:student
/**
 * Student
 *
 * @author shanzhu
 * @version 1.0 2011-10-17
 */
package json;

import java.io.Serializable;

public class Student implements Serializable {

    /**
     * 
     */
    private static final long serialVersionUID = 8424716517986346222L;

    private Integer id;
    private String name;
    private Integer age;
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public Integer getAge() {
        return age;
    }
    public void setAge(Integer age) {
        this.age = age;
    }
}


对于这些基本类型的pojo。我们可以采用反射的形式来生成以及解析成json对象或则java对象。
下面是一个test的入口。
/**
 * json test
 *
 * @author shanzhu
 * @version 1.0 2011-10-17
 */
package json;

import json.reflect.JsonReflect;
import net.sf.json.JSONObject;

public class JsonText {

    /**
     * @param args
     */
    public static void main(String[] args) {
//          对象转化成json格式的        
//        Student student =  new Student();
//        student.setAge(10);
//        student.setId(1);
//        student.setName("bushyou");
//        Map mapObject = (new JsonReflect<Student>(student)).Class2JsonObject();
//        JSONObject jsonObject = new JSONObject();
//        jsonObject.put("status", 200);
//        jsonObject.put("data", mapObject);
//        System.out.println(jsonObject.toString());
        
        
//      json格式转化成对象的        
        String  strObject = "{\"status\":200,\"data\":{\"id\":1,\"age\":10,\"name\":\"bushyou\"}}";
        //生成json格式
        JSONObject jsonObject1 = JSONObject.fromObject(strObject);
        JSONObject jsonObject2 = (JSONObject) jsonObject1.get("data");
        Student student =  new Student();
        student = new JsonReflect<Student>(student).JsonObject2Class(jsonObject2);
        System.out.println(student.getName());
    }

}



主要的处理以及解析的都在JsonReflect类中来处理。
/**
 * 操作json格式的基础类
 *
 * @author shanzhu
 * @version 1.0 2011-10-17
 */
package json.reflect;

import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.HashMap;
import java.util.Map;

import json.reflect.factory.IType;
import json.reflect.factory.JavaTypeFactory;
import net.sf.json.JSONObject;

public class JsonReflect<T> {
    private static final String SERIAL_VERSION_UID = "serialVersionUID";
    public Class classType;
    private T t;

    public JsonReflect(T t) {
        this.t = t;
        classType = t.getClass();
    }

    /**
     * 将类转化成json对象
     * @return
     */
    public Map Class2JsonObject() {
        Field[] fields = this.classType.getDeclaredFields();
        String filedsName = "";
        Object filedsValue = "";
        Map map = new HashMap();
        Field field = null;
        for (int i = 0; i < fields.length; i++) {
            field = fields[i];
            field.setAccessible(true);
            filedsName = field.getName();
            if (SERIAL_VERSION_UID.equalsIgnoreCase(filedsName)) {
                continue;
            }
            try {
                filedsValue = field.get(t);
            } catch (IllegalArgumentException e) {
                e.printStackTrace();
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            }
            map.put(filedsName,filedsValue);
            field = null;
        }
        return map;
    }
    
    public T JsonObject2Class(JSONObject jsonObject){
        T t = null;
        Object obj = null;
        try {
            obj = classType.newInstance();
        } catch (InstantiationException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        } catch (IllegalAccessException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }//通过class类反射一个对象实体
        Field[] fields = this.classType.getDeclaredFields();
        String filedsName = "";
        Field field = null;
        for (int i = 0; i < fields.length; i++) {
            field = fields[i];
            field.setAccessible(true);
            filedsName = field.getName();
            if (SERIAL_VERSION_UID.equalsIgnoreCase(filedsName)) {
                continue;
            }
            
            String type = field.getType().getSimpleName();  //原始类型
            IType typeObject =JavaTypeFactory.createType(type);
            Object object = typeObject.createData(jsonObject.get(filedsName)+"");   //生成的值。。用于反射
            Class classType = typeObject.getClassType();    //生成的类型。。用于反射

            
            try {
                String filedsSet ="set" + filedsName.substring(0,1).toUpperCase()+ filedsName.substring(1);
                Method m = this.classType.getDeclaredMethod(filedsSet,new Class[]{classType});
                m.invoke(obj,object);
            } catch (SecurityException e) {
                e.printStackTrace();
            } catch (NoSuchMethodException e) {
                e.printStackTrace();
            } catch (IllegalArgumentException e) {
                e.printStackTrace();
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            } catch (InvocationTargetException e) {
                e.printStackTrace();
            }   
        }
        t = (T) obj;
        return t;
    }

}

下面是一个简单的工厂JavaTypeFactory,用于反射相关的值。
/**
 * java 基本类型生成工厂方法
 *
 * @author shanzhu
 * @version 1.0 2011-10-17
 */
package json.reflect.factory;

public class JavaTypeFactory {

    public static IType createType(String type){
        if (type==null || "".equals(type)) {
            new IllegalAccessException("type is not can be null");
        }
        if ("int".equalsIgnoreCase(type) || "Integer".equalsIgnoreCase(type)) {
            return new IntergetType();
        }
        if ("String".equalsIgnoreCase(type)) {
            return new StringType();
        }
        if ("date".equalsIgnoreCase(type)) {
            return new DateType();
        }
        
        return new StringType();
    }
}

/**
 * Integer
 *
 * @author shanzhu
 * @version 1.0 2011-10-17
 */
package json.reflect.factory;

public class IntergetType implements IType {

    @Override
    public Object createData(String oldValue) {
        // TODO Auto-generated method stub
        return new Integer(oldValue);
    }

    @Override
    public Class getClassType() {
        // TODO Auto-generated method stub
        return Integer.class;
    }

}
/**
 * Date
 *
 * @author shanzhu
 * @version 1.0 2011-10-17
 */
package json.reflect.factory;

import java.util.Date;

public class DateType implements IType {

    @Override
    public Object createData(String oldValue) {
        // TODO Auto-generated method stub
        return new Date(oldValue);
    }

    @Override
    public Class getClassType() {
        // TODO Auto-generated method stub
        return Date.class;
    }

}
/**
 * Long
 *
 * @author shanzhu
 * @version 1.0 2011-10-17
 */
package json.reflect.factory;

public class LongType implements IType {

    @Override
    public Object createData(String oldValue) {
        return new Long(oldValue);
    }

    @Override
    public Class getClassType() {
        // TODO Auto-generated method stub
        return Long.class;
    }

}
/**
 * String
 *
 * @author shanzhu
 * @version 1.0 2011-10-17
 */
package json.reflect.factory;

public class StringType implements IType{

    public String createData(String oldValue) {
        return new String(oldValue) ;
    }

    @Override
    public Class getClassType() {
        // TODO Auto-generated method stub
        return String.class;
    }

}


下面是接口。
/**
 * 接口
 *
 * @author shanzhu
 * @version 1.0 2011-10-17
 */
package json.reflect.factory;

public interface IType {
    //设置数据
    public Object createData(String oldValue);
    public Class getClassType();
}
分享到:
评论

相关推荐

    使用json-lib实现json与Java对象的互转

    要使用 `json-lib` 实现 JSON 与 Java 对象的互转,首先需要在项目中引入该库。如果你使用的是 Maven,可以在 `pom.xml` 文件中添加如下依赖: ```xml &lt;groupId&gt;net.sf.json-lib&lt;/groupId&gt; &lt;artifactId&gt;json-lib...

    使用json-lib将java对象转换成json字符串

    1. **JSON与Java对象的互转**: - JSON对象可以映射为Java对象,如HashMap、ArrayList等。JSON字符串到Java对象的转换通常通过反序列化实现,而Java对象到JSON字符串的转换则称为序列化。 - json-lib库提供了一套...

    Java对象和JSON互转换利器-Gson

    Java对象与JSON之间的转换在现代Web开发中至关重要,因为它们是服务器端数据处理和客户端交互的主要格式。Gson是Google提供的一个开源库,专门用于在Java对象和JSON数据之间进行无缝转换。它以其强大、灵活和高效而...

    json与java对象互转

    在实际应用中,日期类型的处理往往是JSON与Java对象互转中的难点。Gson通过实现`JsonSerializer`和`JsonDeserializer`接口,允许开发者自定义日期类型的序列化和反序列化策略。例如: ```java public class ...

    JSON对象互转案例fastjson

    我们可能还会遇到`JSON.parse()`(将JSON字符串解析为Java对象)、`JSON.toJSON()`(将Java对象转换为JSON对象)等方法,这些都是Fastjson提供的便利工具,使得JSON对象在Java环境中的操作变得简单高效。 总结一下...

    json_lib使用实例:java对象与json字符串的互转

    总结来说,`json-lib`是一个强大且易用的工具,它使得在Java中处理JSON变得简单。通过其提供的API,我们可以方便地进行JSON字符串与Java对象之间的双向转换,同时还能处理各种复杂的数据结构。在实际开发中,掌握...

    java调用json参数的webservice

    2. 使用诸如net.sf.json JSONObject类(一个流行的Java库,用于处理JSON数据)来将JSON格式字符串转换为JSON对象。转换后,服务端可以通过指定的键(key)来获取JSON对象中的值。 3. 在Java客户端,调用WebService...

    Java对象和Json对象互转采购的Gson方式所需要的jar包

    本篇将详细介绍使用Gson进行Java对象和Json对象互转的方法以及所需的jar包。 首先,要使用Gson库,你需要在项目中引入相关的jar包。根据描述,这里提供了一个压缩包,包含四个所需的jar包。这些jar包通常包括Gson的...

    使用jackson完成json与java对象的互相转换实例

    Jackson是Java领域最流行的JSON处理库之一,它提供了高效且灵活的API来实现JSON与Java对象之间的相互转换。本实例将详细介绍如何使用Jackson库进行JSON到Java对象的反序列化以及Java对象到JSON的序列化。 首先,...

    string 对象 与json互转

    本文将深入探讨`String`与JSON的互转方法,并提供一个简单的测试案例。 一、`String`转`JSON` 1. 使用`org.json`库 `org.json`库提供了一个名为`JSONObject`的类,可以将`String`转换为JSON对象。首先,确保你的...

    net.sf.json.JSONObject实现Object对象与Json字符串的互转

    在进行JSON与Java对象互转时,需要注意的是,Java对象的属性必须有对应的getter和setter方法,因为`JSONObject`依赖于Java的反射机制来读取和设置属性。此外,`JSONObject`在处理枚举类型时可能需要特别处理,通常会...

    JSON互转工具

    标题“JSON互转工具”指的是一个能够将JSON字符串与Java对象之间进行转换的工具或库。这通常涉及到序列化和反序列化的过程。序列化是将Java对象转换为JSON格式的字符串,而反序列化则是将JSON字符串解析成Java对象。...

    java json api,json api

    Java JSON API是Java平台上的库,提供了处理JSON的能力,包括解析JSON字符串、生成JSON对象以及进行JSON与Java对象之间的转换。 在Java中,有多种实现JSON API的库,如Jackson、Gson、org.json和json-lib等。本篇...

    Java中Json字符串与各种对象互转

    可以处理简单java对象和格式正确的json字符串互相转换。 net.sf.json.JSONArray可以处理复杂的java集合对象和格式正确的json字符串互相转换. 1.json字符串转简单java对象 2.简单java对象转json字符串 3.json字符...

    JSON字符串和java对象的相互转换

    JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,它采用完全独立于语言的文本格式,但也使用了类似于C风格的语言,如JavaScript、Python、Java等。在Java开发中,JSON字符串与Java对象之间的相互...

    Java和Json互转的工具类

    总之,Java和JSON之间的互转是常见的开发任务。`org.json`库提供了一系列的工具类,使这个过程变得简单易行。无论是将Java对象、Map还是List转换为JSON,或者反过来将JSON解析回Java对象,都有相应的API支持。了解并...

    java 对象与json字符串互相转换工具类

    Java提供了多种库来实现对象与JSON的互转,如Jackson、Gson、Fastjson等。这里我们将主要讨论这些工具类的使用方法以及它们在处理对象到JSON字符串和反向转换时的关键知识点。 1. Jackson库: Jackson是Java中非常...

    安卓 JSON实现对象和数组的相互转换

    总结,Android中的JSON转换通常依赖于如Gson这样的库,它们提供了方便的方法来在Java对象和JSON格式之间进行转换。通过创建工具类,我们可以简化代码并提高代码复用性。在实际项目中,还可以根据需求扩展`GsonUtil`...

    java json xml转换

    本文将详细探讨Java中JSON与XML的互转,以及如何在实际开发中运用这些技术。 标题:“java json xml转换” 描述:“java版的json与xml之间的转换的实例demo” JSON和XML各有优缺点。JSON以其简洁、易于阅读和生成...

    gson解析器实现json和实体类对象互转源代码

    它使得在Java应用程序中处理JSON变得简单,无论是将JSON解析成Java对象,还是将Java对象序列化为JSON格式的字符串。在本文中,我们将深入探讨Gson解析器的工作原理以及如何利用它来实现JSON和实体类对象之间的互转。...

Global site tag (gtag.js) - Google Analytics