`
xiaoshiyier
  • 浏览: 3512 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

java对象转json

阅读更多
import java.util.Map;

import java.beans.BeanInfo;

import java.beans.IntrospectionException;

import java.beans.Introspector;

import java.beans.PropertyDescriptor;

import java.lang.reflect.InvocationTargetException;

import java.lang.reflect.Method;

import java.math.BigDecimal;

import java.text.SimpleDateFormat;

import java.util.*;

public class JSON1 {

    private static final String quote = "\"";

    private static final String braceL = "{";

    private static final String braceR = "}";

    private static final String middleBraceL = "[";

    private static final String middleBraceR = "]";

    private static final String comma = ",";

    private static final String colon = ":";

    private static final String defaultDateFormat = "yyyy-MM-dd HH:mm:ss";

    public static String toJsonString(Object obj) {

        return toJsonString(obj, defaultDateFormat);

    }

    public static String toJsonString(Object obj, String dateFormat) {

        StringBuilder sb = null;

        try {

            sb = parseObject(obj, dateFormat);

        } catch (IntrospectionException e) {

            e.printStackTrace();

        } catch (InvocationTargetException e) {

            e.printStackTrace();

        } catch (IllegalAccessException e) {

            e.printStackTrace();

        }

        if (null != sb && sb.length() > 0 && sb.substring(sb.length() - 1).equals(comma)) {

            sb = new StringBuilder(sb.substring(0, sb.lastIndexOf(comma)));

        }

        return sb == null ? "" : sb.toString();
    }

    public static StringBuilder parseObject(Object object, String dateFormat) throws IntrospectionException, InvocationTargetException, IllegalAccessException {

        StringBuilder sb = new StringBuilder();

        if (canGetValue(object)) {

            sb.append(getSimpleValue(object, dateFormat));

        } else if (object instanceof List) {

            //遇到list

            sb.append(middleBraceL);

            List list = (List) object;

            for (Object o : list) {

                sb.append(parseObject(o, dateFormat)).append(comma);

            }

            if (list.size() > 0) {

                sb = new StringBuilder(sb.substring(0, sb.lastIndexOf(comma)));

            }

            sb.append(middleBraceR);

        } else if (object instanceof Map) {

            //遇到map

            sb.append(braceL);

            Map map = (Map) object;

            Set<Map.Entry> entrySet = map.entrySet();

            for (Map.Entry entry : entrySet) {

                sb.append(quote).append(entry.getKey()).append(quote).append(colon);

                sb.append(parseObject(entry.getValue(), dateFormat)).append(comma);

            }

            if (map.size() > 0) {

                sb = new StringBuilder(sb.substring(0, sb.lastIndexOf(comma)));

            }

            sb.append(braceR);

        } else if (object.getClass().isArray()) {

            //遇到数组

            sb.append(middleBraceL);

            List list = Arrays.asList(object);

            for (Object o : list) {

                sb.append(parseObject(o, dateFormat)).append(comma);

            }

            if (list.size() > 0) {

                sb = new StringBuilder(sb.substring(0, sb.lastIndexOf(comma)));

            }

            sb.append(middleBraceR);

        } else {

            //其他正常plain对象

            BeanInfo beanInfo = Introspector.getBeanInfo(object.getClass()); // 获取类属性

            PropertyDescriptor[] pds = beanInfo.getPropertyDescriptors();

            sb.append(braceL);

            for (PropertyDescriptor pd : pds) {

                if (pd.getName().equals("class")) {

                    continue;

                }

                String key = pd.getName();

                Method readMethod = pd.getReadMethod();

                Object result = readMethod.invoke(object, null);

                sb.append(quote).append(key).append(quote).append(colon);

                sb.append(parseObject(result, dateFormat)).append(comma);

            }

            if (pds.length > 1) {

                sb = new StringBuilder(sb.substring(0, sb.lastIndexOf(comma)));

            }

            sb.append(braceR);

        }

        return sb;

    }

    private static StringBuilder getSimpleValue(Object val, String dateFormat) {

        if (null == val) {

            return new StringBuilder("null");

        }

        StringBuilder sb = new StringBuilder();

        if (needQuote(val)) {

            sb.append(quote);

            if (val instanceof Date) {

                SimpleDateFormat sf = new SimpleDateFormat(dateFormat);

                sb.append(new StringBuilder(sf.format(val)));

            } else {

                sb.append(val);

            }

            sb.append(quote);

        } else {

            sb.append(val);

        }

        return sb;

    }


    private static boolean needQuote(Object object) {

        return object instanceof String || object instanceof Date;

    }


    private static boolean canGetValue(Object object) {

        return object instanceof Boolean || object instanceof Character ||

                object instanceof Byte || object instanceof Short ||

                object instanceof Integer || object instanceof Double ||

                object instanceof Long || object instanceof Date ||

                object instanceof BigDecimal || object instanceof Float ||

                object instanceof String || null == object;

    }


    public static void main(String[] args) {

        //  String[] ss = {"sdf", "dfd"};

        // System.out.println(ss.getClass().isArray());

        User user = new User(20, "yujun", "男");

        User subUser = new User(2, "yuxx", "女");

        user.setSubUser(subUser);

        List<User> users = new ArrayList<User>();

        User user1 = new User(1, "a", "n");

        User user2 = new User(2, "b", "v");

        User user3 = new User(3, "c", "n");

        User user4 = new User(4, "d", "v");

        user4.setSubUser(user);

        users.add(user1);

        users.add(user2);

        users.add(user3);

        users.add(user4);


        Map<String, Object> m = new HashMap<String, Object>();

        m.put("a", "dfsdf");

        m.put("b", user);

        m.put("c", users);

        m.put("date", new Date());

        //list
        System.out.println(toJsonString(users));

        //map
        System.out.println(toJsonString(m));

        //other obj
        System.out.println(toJsonString(user));

    }

}

class User {
    private Integer age;
    private String name;
    private String sex;
    private User subUser;

    public User() {
    }

    public User(Integer age, String name, String sex) {
        this.age = age;
        this.name = name;
        this.sex = sex;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public User getSubUser() {
        return subUser;
    }

    public void setSubUser(User subUser) {
        this.subUser = subUser;
    }
}
分享到:
评论

相关推荐

    java对象转json用的jar包

    实现java对象转换json格式数据,非常方便 例如: List list=service.queryTasks(query); JSONArray json=JSONArray.fromObject(list); System.out.println(json);

    java对象转JSON

    1.一款将java对象转成json或是将json转成java对象的jar文件; 2.在网上找了半天才找到,希望大家共享; 3.使用方法,大家在网上随便找,很多,很简单,一看便会; 4.此包在eclipse中和AndroidStudio中都可以用,但是,你如果...

    java对象转Json 需要用到的所有包

    总的来说,这个压缩包可能包含了用于Java对象到JSON转换的必备库,无论是Jackson还是Gson,它们都能帮助开发者高效地完成JSON数据的处理。根据你的项目需求和团队偏好,选择合适的库并正确引入这些jar包,就可以方便...

    json 字符串转java对象,java对象转json字符串

    自己有空时用java反射写的json转化工具,有不完善之处,多包涵

    java对象转json所需要的包

    java对象转json所需要的包 解决JSONObject.fromObject()和JSONArray.fromObject()报 java.lang.NoClassDefFoundError的问题。 导入jar包后请 import net.sf.json.JSONArray; import net.sf.json.JSONObject;

    java对象转json示例

    总结,Java对象转JSON的过程主要包括创建Java对象,使用`JSONObject`将对象转换为JSON,最后将JSON对象转换为字符串进行传递。在Android环境中,虽然可以直接使用内置的`org.json`包,但考虑到功能和效率,推荐使用...

    java对象转json工具类

    ### Java对象转JSON工具类详解 #### 一、引言 在现代软件开发过程中,JSON(JavaScript Object Notation)作为一种轻量级的数据交换格式被广泛使用。它基于JavaScript的一个子集,采用完全独立于编程语言的文本...

    java对象转Json AjaxJson数据交换 需要用到的所有包

    3. **Json转对象** 反序列化JSON字符串回Java对象同样使用`ObjectMapper`: ```java Person deserializedPerson = mapper.readValue(jsonString, Person.class); ``` `readValue()`方法会将JSON字符串解析成`...

    java对象转换为json字符串或字符串数组

    在Java开发中,将Java对象转换为JSON字符串或字符串数组是一项常见的任务,特别是在与前端交互、数据存储或者网络传输时。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也...

    java对象转json问题.rar

    以上就是关于Java对象转JSON的基本知识,包括使用Jackson库进行转换、处理复杂对象、自定义序列化和反序列化,以及错误处理和性能优化。在具体项目中,根据实际需求选择合适的库和策略,可以有效提高开发效率和代码...

    JAVA-JSON工具转换类

    可能包含的方法有`toJson()`(将Java对象转换为JSON字符串)、`fromJson()`(将JSON字符串解析为Java对象)、`convertToMap()`(将JSON字符串转换为Map)以及`convertToList()`(将JSON字符串转换为List)等。...

    json格式与java类对象相互转换

    1. 将Java对象转换为JSON字符串,同样使用`ObjectMapper`: ```java User john = new User(1, "John", "john@example.com"); String johnJson = mapper.writeValueAsString(john); ``` 2. 对于集合类型,如List或...

    Json与java对象之间相互转换源码

    在Java中,我们经常需要将JSON字符串与Java对象进行相互转换,以便于数据的传输和处理。本篇文章将详细探讨这个过程,以及如何使用常见的Java JSON库,如Gson和Jackson,进行JSON与Java对象的转换。 首先,让我们...

    Java对象转json的方法过程解析

    Gson不仅支持对象转JSON,还支持JSON转对象。它的性能也相对较好,使用起来更为直接和方便。 3. FastJson:这是阿里巴巴开源的一个Java库,用于将Java对象转换成JSON格式的数据。FastJson具有很强的性能,并且在...

    浅谈java对象转json,数字精确出现丢失问题

    总的来说,Java对象转JSON过程中遇到的大数字精度丢失和科学记数法显示问题,主要是JavaScript引擎的限制所导致。通过将数字类型转换为字符串类型,可以有效地解决这个问题。在实际开发中,确保对大数字的处理方式有...

    Java对象与Json之间的互相转换的jar包

    在处理JSON数据时,我们通常需要将Java对象转换为JSON字符串,或者将JSON字符串反序列化为Java对象。这个"Java对象与Json之间的互相转换的jar包"正是提供了这样的功能。 这个jar包可能包含了如Jackson、Gson、...

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

    ### JSON转Java对象 **2. JSON转Java对象** 将JSON字符串转换回Java对象同样简单,只需要指定目标类型。比如要从上面的JSON字符串恢复`Person`对象: ```java String jsonString = "{\"name\":\"张三\",\"age\":...

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

    1. **JSON字符串转Java对象** 使用`json-lib`,我们可以将JSON字符串解析为JavaBean、HashMap、ArrayList等。例如,假设我们有一个JSON字符串`{"name":"John", "age":30}`,可以这样转换: ```java String json...

    javaBean to json java对象转换json jar

    总结来说,`javaBean to json java对象转换 jar`这个主题涉及到Java对象的序列化、JSON数据格式以及Java的归档文件系统。通过使用类似`JsonFactory.toJson()`这样的方法,开发者可以方便地将JavaBean对象转换为JSON...

    json转对象(java 多级嵌套)

    5. **反向操作:Java对象转JSON** 除了将JSON转换为Java对象,我们还可以使用`ObjectMapper`将Java对象转换回JSON字符串,这对于前端展示或存储数据非常有用: ```java String json = mapper.writeValueAsString...

Global site tag (gtag.js) - Google Analytics