java解析和读取JSON

来源:互联网 发布:光纤三端口环形器原理 编辑:程序博客网 时间:2024/05/24 03:20

1.JSON介绍

  JSON比XML简单,主要体现在传输相同信息的情况下,文件的大小不同

  JSON只用于传输信息,XML还可以用于配置文件的使用。

  JSON中的符号主要有: " , [ {:

2.JSON中的数组和对象

  2.1数组(JSONArray

  数组用一对[],表示存放的是一般的数组数据。

  如:["11","22","33"],表示这是一个JSONArray数组,里面有3个数据:”11“,”22“,”33“。当然可以是复杂的数据,就是所谓的嵌套定义吧。

  2.对象(JSONObject

  对象用一对{},来表示其中JSON通用的”键-值“对。

  如:{"sex1":"female","name0":"zhangsan"},表示的是一个JSON对象,里面有两组数据(键值对),sex1=female,name0=zhangsan。当然这里键对应的数据值,可以是复杂的JSON对象或者数组。

3.代码示例

[java] view plaincopyprint?
  1. package com.somnus.json;  
  2.   
  3. import java.lang.reflect.Field;  
  4. import java.util.ArrayList;  
  5. import java.util.Date;  
  6. import java.util.HashMap;  
  7. import java.util.Iterator;  
  8. import java.util.List;  
  9. import java.util.Map;  
  10.   
  11. import net.sf.json.JSONArray;  
  12. import net.sf.json.JSONObject;  
  13. import net.sf.json.JsonConfig;  
  14. import net.sf.json.processors.JsDateJsonValueProcessor;  
  15. import net.sf.json.util.CycleDetectionStrategy;  
  16.   
  17. /** 
  18.  * Json与javaBean之间的转换工具类 
  19.  * 
  20.  * @author 
  21.  * 
  22.  *         {@code   现使用json-lib组件实现 
  23.  *          需要 
  24.  *              json-lib-2.4-jdk15.jar 
  25.  *              ezmorph-1.0.6.jar 
  26.  *              commons-collections-3.1.jar 
  27.  *              commons-lang-2.0.jar 
  28.  *              commons-beanutils-1.9.1.jar 
  29.  *          支持 
  30.  * } 
  31.  */  
  32.   
  33. public class JsonUtil {  
  34.     // *************************************以下对象转换为JSON***************************************************************  
  35.     private static JsonConfig configJson(String[] excludes) {  
  36.         JsonConfig jsonConfig = new JsonConfig();  
  37.         jsonConfig.setExcludes(excludes);  
  38.         jsonConfig.setIgnoreDefaultExcludes(false);  
  39.         jsonConfig.setCycleDetectionStrategy(CycleDetectionStrategy.LENIENT);  
  40.         jsonConfig.registerJsonValueProcessor(Date.classnew JsDateJsonValueProcessor());  
  41.         return jsonConfig;  
  42.     }  
  43.   
  44.     /** 
  45.      * 将java对象转换成json字符串 
  46.      * 
  47.      * @param bean 
  48.      * @return 
  49.      */  
  50.     public static String obj2JsonString(Object obj) {  
  51.         JSONObject json = JSONObject.fromObject(obj);  
  52.         return json.toString();  
  53.     }  
  54.   
  55.     /** 
  56.      * 将java对象指定的属性转换成json字符串 
  57.      * 
  58.      * @param bean 
  59.      * @param include 
  60.      *            包含的属性字段值 
  61.      * @param nory 
  62.      * @return 
  63.      */  
  64.     public static String obj2JsonString(Object obj, String[] include, boolean nory) {  
  65.         JSONObject json = null;  
  66.         // 转换include里的属性  
  67.         if (nory){  
  68.             Field[] fields = obj.getClass().getDeclaredFields();  
  69.             String str = "";  
  70.             for (Field field : fields) {  
  71.                 str += ("#" + field.getName());  
  72.             }  
  73.             fields = obj.getClass().getSuperclass().getDeclaredFields();  
  74.             for (Field field : fields) {  
  75.                 str += ("#" + field.getName());  
  76.             }  
  77.             str += "#";  
  78.             for (String s : include) {  
  79.                 str = str.replace("#" + s + "#""#");  
  80.             }  
  81.             json = JSONObject.fromObject(obj, configJson(str.split(":")));  
  82.         }   
  83.         // 转换除了include里的属性  
  84.         else {  
  85.             json = JSONObject.fromObject(obj, configJson(include));  
  86.         }  
  87.         return json.toString();  
  88.     }  
  89.   
  90.     /** 
  91.      * 将java对象List集合转换成json字符串 
  92.      *  
  93.      * @param beans 
  94.      * @return 
  95.      */  
  96.     public static <E> String list2JsonString(List<E> list) {  
  97.         StringBuffer temp = new StringBuffer();  
  98.         temp.append("[");  
  99.         int size = list.size();  
  100.         for (int i = 0; i < size; i++) {  
  101.             temp.append(obj2JsonString(list.get(i)) + ((i < size - 1) ? "," : ""));  
  102.         }  
  103.         temp.append("]");  
  104.         return temp.toString();  
  105.     }  
  106.       
  107.     public static <E> String list2JsonString_(List<E> list) {  
  108.         JSONArray jsonArray = JSONArray.fromObject(list);  
  109.         return jsonArray.toString();  
  110.     }  
  111.   
  112.   
  113.     /** 
  114.      * 将List中所含对象指定的属性转换成json字符串 
  115.      * 
  116.      * @param bean 
  117.      * @param include 
  118.      *            包含的属性字段值 
  119.      * @param nory 
  120.      * @return 
  121.      */  
  122.     public static <E> String list2JsonString(List<E> beans, String[] include, boolean nory) {  
  123.         StringBuffer rest = new StringBuffer();  
  124.         rest.append("[");  
  125.         int size = beans.size();  
  126.         for (int i = 0; i < size; i++) {  
  127.             rest.append(obj2JsonString(beans.get(i), include, nory) + ((i < size - 1) ? "," : ""));  
  128.         }  
  129.         rest.append("]");  
  130.         return rest.toString();  
  131.     }  
  132.      
  133.   
  134.     /** 
  135.      * map集合转换成json格式数据 
  136.      *  
  137.      * @param map 
  138.      * @return 
  139.      */  
  140.     @SuppressWarnings("unchecked")  
  141.     public static <E, V> String map2JsonString(Map<E, V> map, String[] include, boolean nory) {  
  142.         String s_json = "{";  
  143.         for (Iterator<E> it = map.keySet().iterator(); it.hasNext();) {  
  144.             String key = (String) it.next();  
  145.             if (map.get(key) == null) {  
  146.             } else if (map.get(key) instanceof List) {  
  147.                 s_json += ("\"" + key + "\":" + JsonUtil.list2JsonString((List<E>) map.get(key), include, nory));  
  148.             } else {  
  149.                 JSONObject json = JSONObject.fromObject(map.get(key));  
  150.                 s_json += ("\"" + key + "\":" + json.toString());  
  151.             }  
  152.             if (it.hasNext()) {  
  153.                 s_json += ",";  
  154.             }  
  155.         }  
  156.         s_json += "}";  
  157.         return s_json;  
  158.     }  
  159.   
  160.     // *************************************以下JSON转换为对象***************************************************************  
  161.   
  162.     /** 
  163.      * 从一个JSON 对象字符格式中得到一个java对象 
  164.      *  
  165.      * @param jsonString 
  166.      * @param beanCalss 
  167.      * @return 
  168.      */  
  169.     @SuppressWarnings("unchecked")  
  170.     public static <T> T jsonString2Object(String jsonString, Class<T> clazz) {  
  171.         JSONObject jsonObject = JSONObject.fromObject(jsonString);  
  172.         T bean = (T) JSONObject.toBean(jsonObject, clazz);  
  173.         return bean;  
  174.     }  
  175.   
  176.     /** 
  177.      * 从json HASH表达式中获取一个map,改map支持嵌套功能 
  178.      * 
  179.      * @param jsonString 
  180.      * @return 
  181.      */  
  182.     @SuppressWarnings({ "unchecked" })  
  183.     public static<E, V> Map<E, V> jsonString2Map(String jsonString) {  
  184.         JSONObject jsonObject = JSONObject.fromObject(jsonString);  
  185.         Iterator<E> keyIter = jsonObject.keys();  
  186.         E key;  
  187.         V value;  
  188.         Map<E, V> valueMap = new HashMap<E, V>();  
  189.         while (keyIter.hasNext()) {  
  190.             key = (E)keyIter.next();  
  191.             value = (V)jsonObject.get(key);  
  192.             valueMap.put(key, value);  
  193.         }  
  194.         return valueMap;  
  195.     }  
  196.   
  197.     /** 
  198.      * 从json对象集合表达式中得到一个java对象列表 
  199.      * 
  200.      * @param jsonString 
  201.      * @param beanClass 
  202.      * @return 
  203.      */  
  204.     @SuppressWarnings("unchecked")  
  205.     public static <T> List<T> json2ObjectList(String jsonString, Class<T> beanClass) {  
  206.         JSONArray jsonArray = JSONArray.fromObject(jsonString);  
  207.         JSONObject jsonObject;  
  208.         T bean;  
  209.         int size = jsonArray.size();  
  210.         List<T> list = new ArrayList<T>(size);  
  211.         for (int i = 0; i < size; i++) {  
  212.             jsonObject = jsonArray.getJSONObject(i);  
  213.             bean = (T) JSONObject.toBean(jsonObject, beanClass);  
  214.             list.add(bean);  
  215.         }  
  216.         return list;  
  217.     }  
  218.       
  219.     /** 
  220.      * 从json数组中得到相应java数组 
  221.      * 
  222.      * @param jsonString 
  223.      * @return 
  224.      */  
  225.     public static Object[] jsonToObjectArray(String jsonString) {  
  226.         JSONArray jsonArray = JSONArray.fromObject(jsonString);  
  227.         return jsonArray.toArray();  
  228.     }  
  229.   
  230.     /** 
  231.      * 从json数组中解析出java字符串数组 
  232.      * 
  233.      * @param jsonString 
  234.      * @return 
  235.      */  
  236.     public static String[] jsonToStringArray(String jsonString) {  
  237.         JSONArray jsonArray = JSONArray.fromObject(jsonString);  
  238.         String[] stringArray = new String[jsonArray.size()];  
  239.         int size = jsonArray.size();  
  240.         for (int i = 0; i < size; i++) {  
  241.             stringArray[i] = jsonArray.getString(i);  
  242.         }  
  243.         return stringArray;  
  244.     }  
  245.   
  246.     /** 
  247.      * 从json数组中解析出javaLong型对象数组 
  248.      * 
  249.      * @param jsonString 
  250.      * @return 
  251.      */  
  252.     public static Long[] jsonToLongArray(String jsonString) {  
  253.         JSONArray jsonArray = JSONArray.fromObject(jsonString);  
  254.         int size = jsonArray.size();  
  255.         Long[] longArray = new Long[size];  
  256.         for (int i = 0; i < size; i++) {  
  257.             longArray[i] = jsonArray.getLong(i);  
  258.         }  
  259.         return longArray;  
  260.     }  
  261.   
  262.     /** 
  263.      * 从json数组中解析出java Integer型对象数组 
  264.      * 
  265.      * @param jsonString 
  266.      * @return 
  267.      */  
  268.     public static Integer[] jsonToIntegerArray(String jsonString) {  
  269.         JSONArray jsonArray = JSONArray.fromObject(jsonString);  
  270.         int size = jsonArray.size();  
  271.         Integer[] integerArray = new Integer[size];  
  272.         for (int i = 0; i < size; i++) {  
  273.             integerArray[i] = jsonArray.getInt(i);  
  274.         }  
  275.         return integerArray;  
  276.     }  
  277.   
  278.     /** 
  279.      * 从json数组中解析出java Double型对象数组 
  280.      *  
  281.      * @param jsonString 
  282.      * @return 
  283.      */  
  284.     public static Double[] jsonToDoubleArray(String jsonString) {  
  285.         JSONArray jsonArray = JSONArray.fromObject(jsonString);  
  286.         int size = jsonArray.size();  
  287.         Double[] doubleArray = new Double[size];  
  288.         for (int i = 0; i < size; i++) {  
  289.             doubleArray[i] = jsonArray.getDouble(i);  
  290.         }  
  291.         return doubleArray;  
  292.     }  
  293.   
  294.     public static void main(String[] args) {  
  295.         User user = new User();  
  296.         user.setUsername("admin");  
  297.         user.setPassword("123");  
  298.         user.setAge(20);  
  299.         User user2 = new User();  
  300.         user2.setUsername("admin2");  
  301.         user2.setPassword("123456");  
  302.         user2.setAge(24);  
  303.         System.out.println("一:" + JsonUtil.obj2JsonString(user));  
  304.   
  305.         Map<String, String> map11 = new HashMap<String, String>();  
  306.         map11.put("1""a");  
  307.         map11.put("2""b");  
  308.         System.out.println("二:" + JsonUtil.obj2JsonString(map11));  
  309.   
  310.         System.out.println("****************************************************************");  
  311.         List<User> list = new ArrayList<User>();  
  312.         list.add(user);  
  313.         list.add(user2);  
  314.         System.out.println("三:" + JsonUtil.list2JsonString(list));  
  315.         System.out.println("四:" + JsonUtil.list2JsonString_(list));  
  316.   
  317.         System.out.println("****************************************************************");  
  318.         // 只包含数组里面的属性  
  319.         System.out.println("五:" + JsonUtil.obj2JsonString(user, new String[] { "username" }, true));  
  320.         // 除数组之外的所有属性  
  321.         System.out.println("六:" + JsonUtil.obj2JsonString(user, new String[] { "username" }, false));  
  322.   
  323.         System.out.println("七:" + JsonUtil.list2JsonString(list, new String[] { "username""password" }, true));  
  324.   
  325.         System.out.println("****************************************************************");  
  326.         Map<String, User> map1 = new HashMap<String, User>();  
  327.         map1.put("1", user);  
  328.         map1.put("2", user2);  
  329.         System.out.println("八:" + JsonUtil.map2JsonString(map1, new String[] { "username""password" }, true));  
  330.   
  331.         Map<String, List<User>> map2 = new HashMap<String, List<User>>();  
  332.         map2.put("1", list);  
  333.         System.out.println("九:" + JsonUtil.map2JsonString(map2, new String[] { "username""password" }, true));  
  334.   
  335.     }  
  336.   
  337. }  


打印结果:

一:{"username":"admin","age":20,"password":"123"}
二:{"2":"b","1":"a"}
****************************************************************
三:[{"username":"admin","age":20,"password":"123"},{"username":"admin2","age":24,"password":"123456"}]
四:[
{"username":"admin","age":20,"password":"123"},
{"username":"admin2","age":24,"password":"123456"}
]
****************************************************************
五:{"username":"admin","age":20,"password":"123"}
六:{"age":20,"password":"123"}
七:[{"username":"admin","age":20,"password":"123"},{"username":"admin2","age":24,"password":"123456"}]
****************************************************************
八:{"2":{"username":"admin2","age":24,"password":"123456"},"1":{"username":"admin","age":20,"password":"123"}}
九:{"1":[{"username":"admin","age":20,"password":"123"},{"username":"admin2","age":24,"password":"123456"}]}
****************************************************************
十:[{"username":"admin","age":20,"password":"123"},{"username":"admin2","age":24,"password":"123456"}]
十一:{"2":{"username":"admin2","age":24,"password":"123456"},"1":{"username":"admin","age":20,"password":"123"}}
十二:{"1":[{"username":"admin","age":20,"password":"123"},{"username":"admin2","age":24,"password":"123456"}]}

0 0
原创粉丝点击