`
Cash
  • 浏览: 176034 次
  • 性别: Icon_minigender_1
  • 来自: 沈阳
社区版块
存档分类
最新评论

Java数据 Json 封装测试

阅读更多

借鉴了一下网上一位开发者写大打包类,这个类实用了1.5的泛行特性。并测试一下实际的输出

 

 

package im_testing;


import java.beans.IntrospectionException;
import java.beans.Introspector;
import java.beans.PropertyDescriptor;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.LinkedList;
import java.util.TreeSet;

   
public class JsonUtil { 
    
    //private static org.apache.commons.logging.Log log = org.apache.commons.logging.LogFactory.getLog(JsonUtil.class); 
   
    
    public static String object2json(Object obj) {
      StringBuilder json = new StringBuilder();
      if (obj == null) {
        json.append("\"\""); //对象为null 输出 "" 到 Json
      } else if (obj instanceof String || obj instanceof Integer || obj instanceof Float
          || obj instanceof Boolean || obj instanceof Short || obj instanceof Double
          || obj instanceof Long || obj instanceof BigDecimal || obj instanceof BigInteger
          || obj instanceof Byte) {
        json.append("\"").append(string2json(obj.toString())).append("\""); //对象为字符串、字符、数字等   将内容两端加 "" 输出到 Json
      } else if (obj instanceof Object[]) {
        json.append(array2json((Object[]) obj));
      } else if (obj instanceof List) {
        json.append(list2json((List<?>) obj));
      } else if (obj instanceof Map) {
        json.append(map2json((Map<?, ?>) obj));
      } else if (obj instanceof Set) {
        json.append(set2json((Set<?>) obj));
      } else {
        json.append(bean2json(obj));
      }
      return json.toString();
    }
  
   //Bean 字符化  {"ID":"023945","WC":"1","hall":"1","room":"2"}
   public static String bean2json(Object bean) {
      StringBuilder json = new StringBuilder();
      json.append("{");
      PropertyDescriptor[] props = null;
      try {
       props = Introspector.getBeanInfo(bean.getClass(), Object.class).getPropertyDescriptors();
      } catch (IntrospectionException e) {}
      if (props != null) {
        for (int i = 0; i < props.length; i++) {
         try {
            String name = object2json(props[i].getName());
            String value = object2json(props[i].getReadMethod().invoke(bean));
            json.append(name);
            json.append(":");
            json.append(value);
            json.append(",");
             } catch (Exception e) {}
        }
        json.setCharAt(json.length() - 1, '}');
      } else {
        json.append("}");
      }
      return json.toString();
    }
  
     //list 字符化  ["123","456"]
     public static String list2json(List<?> list) {
      StringBuilder json = new StringBuilder();
      json.append("[");
      if (list != null && list.size() > 0) {
        for (Object obj : list) {
          json.append(object2json(obj));
          json.append(",");
        }
        json.setCharAt(json.length() - 1, ']');
      } else {
        json.append("]");
      }
      return json.toString();
    }
  
    //对象数组 [{"ID":"023945","WC":"1","hall":"1","room":"2"},{"ID":"082384","WC":"1","hall":"2","room":"3"}]
    //适合内容列表,封装为bean发送到JQuery
    public static String array2json(Object[] array) {
      StringBuilder json = new StringBuilder();
      json.append("[");
      if (array != null && array.length > 0) {
        for (Object obj : array) {
          json.append(object2json(obj));
          json.append(",");
        }
        json.setCharAt(json.length() - 1, ']');
      } else {
        json.append("]");
      }
      return json.toString();
    }
  
    //map 
    public static String map2json(Map<?, ?> map) {
      StringBuilder json = new StringBuilder();
      json.append("{");
      if (map != null && map.size() > 0) {
        for (Object key : map.keySet()) {
          json.append(object2json(key));
          json.append(":");
          json.append(object2json(map.get(key)));
          json.append(",");
        }
        json.setCharAt(json.length() - 1, '}');
      } else {
        json.append("}");
      }
      return json.toString();
    }
  
    //set
    public static String set2json(Set<?> set) {
      StringBuilder json = new StringBuilder();
      json.append("[");
      if (set != null && set.size() > 0) {
        for (Object obj : set) {
          json.append(object2json(obj));
          json.append(",");
        }
        json.setCharAt(json.length() - 1, ']');
      } else {
        json.append("]");
      }
      return json.toString();
    }
  
    //字符串
    public static String string2json(String s) {
      if (s == null)
        return "";
      StringBuilder sb = new StringBuilder();
      for (int i = 0; i < s.length(); i++) {
        char ch = s.charAt(i);
        switch (ch) {
        case '"':
          sb.append("\\\"");
          break;
        case '\\':
          sb.append("\\\\");
          break;
        case '\b':
          sb.append("\\b");
          break;
        case '\f':
          sb.append("\\f");
          break;
        case '\n':
          sb.append("\\n");
          break;
        case '\r':
          sb.append("\\r");
          break;
        case '\t':
          sb.append("\\t");
          break;
        case '/':
          sb.append("\\/");
          break;
        default:
          if (ch >= '\u0000' && ch <= '\u001F') {
            String ss = Integer.toHexString(ch);
            sb.append("\\u");
            for (int k = 0; k < 4 - ss.length(); k++) {
              sb.append('0');
            }
            sb.append(ss.toUpperCase());
          } else {
            sb.append(ch);
          }
        }
      }
      return sb.toString();
    }
   
    public static void main(String arg[]){
     String a = "abc\ndefg\"";
     System.out.println("String " + JsonUtil.object2json(a));
    
     List l = new LinkedList();
     l.add("123");l.add("456");
     System.out.println("List " + JsonUtil.object2json(l));
    
     Map m = new HashMap();
     m.put("a", "a-123");m.put("b", "b-456");
     System.out.println("Map " + JsonUtil.object2json(m));
    
     Set s = new TreeSet();
     s.add("789");s.add("123");s.add("456");
     System.out.println("Set " + JsonUtil.object2json(s));
    
     House h1 = new House();
     House h2 = new House();
     h2.setHall(2);h2.setID("082384");h2.setRoom(3);h2.setWC(1);
     System.out.println("House1 " + JsonUtil.bean2json(h1));
     System.out.println("House2 " + JsonUtil.bean2json(h2));
    
     BigInteger bi = new BigInteger("12345678");
     System.out.println("BigInteger " + JsonUtil.object2json(bi));
    
     Object[] o = {h1,h2};
     System.out.println("{h1,h2} " + JsonUtil.object2json(o));
    
    }
   
}

 

 

 

 

以下是输出:

String "abc\ndefg\""
List ["123","456"]
Map {"b":"b-456","a":"a-123"}
Set ["123","456","789"]
House1 {"ID":"023945","WC":"1","hall":"1","room":"2"}
House2 {"ID":"082384","WC":"1","hall":"2","room":"3"}
BigInteger"12345678"
{h1,h2} [{"ID":"023945","WC":"1","hall":"1","room":"2"},{"ID":"082384","WC":"1","hall":"2","room":"3"}]

分享到:
评论

相关推荐

    JAVA上百实例源码以及开源项目源代码

     Java数据压缩与传输实例,可以学习一下实例化套按字、得到文件输入流、压缩输入流、文件输出流、实例化缓冲区、写入数据到文件、关闭输入流、关闭套接字关闭输出流、输出错误信息等Java编程小技巧。 Java数组倒置...

    java调用第三方天气预报实时API接口并解析数据【源码】

    1、封装WeatherInfo实体类,对接口返回的结果进行映射的实体类 2、WeatherUtils类,负责调用第三方天气预报api接口处理的工具类,包括根据城市查询等,返回的格式是json 3、test类,对接口进行功能性测试

    Java HTTP网络通信编程示例

    Java看的HTTP网络编程 网络通信编程实例 适用于Android网络编程 在测试代码中服务端我使用三种方式:S2SH 只用Struts2 Servlet 客户端就一种 只不过换个请求的URL 服务端和客户端交互使用了两种方式:XML JSON 目前...

    java开源包4

    Jackson 是一个 Java 用来处理 JSON 格式数据的类库,性能非常好。 哈希计算工具 java-hash 用来计算 MD5、SHA 哈希算法的 Java 类库,支持 "MD5", "SHA", "SHA-1", "SHA-256", "SHA-384", "SHA-512". 高性能RPC...

    JAVA上百实例源码以及开源项目

     Java数据压缩与传输实例,可以学习一下实例化套按字、得到文件输入流、压缩输入流、文件输出流、实例化缓冲区、写入数据到文件、关闭输入流、关闭套接字关闭输出流、输出错误信息等Java编程小技巧。 Java数组倒置...

    java开源包11

    Jackson 是一个 Java 用来处理 JSON 格式数据的类库,性能非常好。 哈希计算工具 java-hash 用来计算 MD5、SHA 哈希算法的 Java 类库,支持 "MD5", "SHA", "SHA-1", "SHA-256", "SHA-384", "SHA-512". 高性能RPC...

    java开源包6

    Jackson 是一个 Java 用来处理 JSON 格式数据的类库,性能非常好。 哈希计算工具 java-hash 用来计算 MD5、SHA 哈希算法的 Java 类库,支持 "MD5", "SHA", "SHA-1", "SHA-256", "SHA-384", "SHA-512". 高性能RPC...

    java开源包101

    Jackson 是一个 Java 用来处理 JSON 格式数据的类库,性能非常好。 哈希计算工具 java-hash 用来计算 MD5、SHA 哈希算法的 Java 类库,支持 "MD5", "SHA", "SHA-1", "SHA-256", "SHA-384", "SHA-512". 高性能RPC...

    java开源包9

    Jackson 是一个 Java 用来处理 JSON 格式数据的类库,性能非常好。 哈希计算工具 java-hash 用来计算 MD5、SHA 哈希算法的 Java 类库,支持 "MD5", "SHA", "SHA-1", "SHA-256", "SHA-384", "SHA-512". 高性能RPC...

    java开源包5

    Jackson 是一个 Java 用来处理 JSON 格式数据的类库,性能非常好。 哈希计算工具 java-hash 用来计算 MD5、SHA 哈希算法的 Java 类库,支持 "MD5", "SHA", "SHA-1", "SHA-256", "SHA-384", "SHA-512". 高性能RPC...

    java开源包8

    Jackson 是一个 Java 用来处理 JSON 格式数据的类库,性能非常好。 哈希计算工具 java-hash 用来计算 MD5、SHA 哈希算法的 Java 类库,支持 "MD5", "SHA", "SHA-1", "SHA-256", "SHA-384", "SHA-512". 高性能RPC...

    java开源包10

    Jackson 是一个 Java 用来处理 JSON 格式数据的类库,性能非常好。 哈希计算工具 java-hash 用来计算 MD5、SHA 哈希算法的 Java 类库,支持 "MD5", "SHA", "SHA-1", "SHA-256", "SHA-384", "SHA-512". 高性能RPC...

    java开源包1

    Jackson 是一个 Java 用来处理 JSON 格式数据的类库,性能非常好。 哈希计算工具 java-hash 用来计算 MD5、SHA 哈希算法的 Java 类库,支持 "MD5", "SHA", "SHA-1", "SHA-256", "SHA-384", "SHA-512". 高性能RPC...

    java开源包3

    Jackson 是一个 Java 用来处理 JSON 格式数据的类库,性能非常好。 哈希计算工具 java-hash 用来计算 MD5、SHA 哈希算法的 Java 类库,支持 "MD5", "SHA", "SHA-1", "SHA-256", "SHA-384", "SHA-512". 高性能RPC...

    联网版坦克大战 ,基于 C++ server 进行tcp消息的转发(其中使用json来封装数据) client 是客.zip

    所有源码都经过严格测试,可以直接运行。 功能在确认正常工作后才上传。 【适用人群】: 适用于希望学习不同技术领域的小白或进阶学习者。 可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加...

    java开源包2

    Jackson 是一个 Java 用来处理 JSON 格式数据的类库,性能非常好。 哈希计算工具 java-hash 用来计算 MD5、SHA 哈希算法的 Java 类库,支持 "MD5", "SHA", "SHA-1", "SHA-256", "SHA-384", "SHA-512". 高性能RPC...

    android http 多请求异步封装

    5)本demo可以直接运行 本来想测试protobuf进行数据处理的 要放在github上就改成json了(entity中有简单的xml解析:Menu.java 其他的都是json的 json 也可用Gson更方便) 博客链接使用说明:...

    java开源包7

    Jackson 是一个 Java 用来处理 JSON 格式数据的类库,性能非常好。 哈希计算工具 java-hash 用来计算 MD5、SHA 哈希算法的 Java 类库,支持 "MD5", "SHA", "SHA-1", "SHA-256", "SHA-384", "SHA-512". 高性能RPC...

    Java资源包01

    Jackson 是一个 Java 用来处理 JSON 格式数据的类库,性能非常好。 哈希计算工具 java-hash 用来计算 MD5、SHA 哈希算法的 Java 类库,支持 "MD5", "SHA", "SHA-1", "SHA-256", "SHA-384", "SHA-512". 高性能RPC...

    达内java培训目录

    Java语言基础 算法基础、常用数据结构、企业编程规范。 掌握常见的数据结构和实用算法;培养良好的企业级编程习惯。 Java面向对象 面向对象特性:封装、继承、多态等,面向对象程序设计,基础设计模式等。 掌握面向...

Global site tag (gtag.js) - Google Analytics