zoukankan      html  css  js  c++  java
  • JSON

    JSON的用途
      使用基于JavaScript的应用程序,其中包括浏览器扩展和网站
      使用JSON格式序列化和结构化的数据传输网络连接
      这主要用于服务器和Web应用程序之间的数据传输
      Web服务和API采用JSON格式提供公共数据
      它可以用来与现代编程语言
    JSON的特点
      易于读写JSON
      轻量级的基于文本的交换格式
      独立语言
    JSON格式示例:
    • 名称/值对数据表示
    • 大括号持有的对象和每个名称后跟":"(冒号),名称/值对的分离,(逗号)
    • 方括号持有数组和值,(逗号)分隔。
     1 {
     2     "book": [
     3     {
     4        "id":"01",
     5        "language": "Java",
     6        "edition": "third",
     7        "author": "Herbert Schildt"
     8     },
     9     {
    10        "id":"07",
    11        "language": "C++",
    12        "edition": "second"
    13        "author": "E.Balagurusamy"
    14     }]
    15 }

     JSON支持的数据类型: 

      类型                          描述

         Number             在JavaScript中的双精度浮点格式
         String       双引号的反斜杠转义的Unicode
      Boolean      true 或 false
      Array       值的有序序列
      Value       它可以是一个字符串,一个数字,真的还是假(true/false),空(null )等
      Object      无序集合键值对
      Whitespace    可以使用任何一对中的令牌
      null        empty

     
    <script language="javascript" >
    
      var JSONObj = { "Pascal" : [ 
          { "Name"  : "Pascal Made Simple", "price" : 700,"category":[p1,p2] },
          { "Name"  : "Guide to Pascal", "price" : 400,"category":[p1,p2] }
       ],                       
       "Scala"  : [
          { "Name"  : "Scala for the Impatient", "price" : 1000 ,"category":[p1,p2]}, 
          { "Name"  : "Scala in Depth", "price" : 1300,"category":[p1,p2] }
       ]};
    </script>
    

      jquery支持的将字符串转Json对象方法:

        第一种方式:

    function strToJson(str){    
         var json = eval('(' + str + ')');    
         return json;    
    }  
    

        第二种方式:使用JSON.parse需严格遵守JSON规范,如属性都需用引号引起来,没有用引号引起来用JSON.parse所有浏览器中均抛异常,解析失败。

    function strToJson(str){  
        return JSON.parse(str);  
    }  
    

        第三种方式:

     function strToJson(str){  
        var jsonObj = $.parseJSON(JSONObj);
        return jsonObj ;  
    }  
    

    JSON与Java应用:

      json与java实体之间的映射由JSON.simple实体映射从左侧向右侧解码或解析

      JSON      Java

      string     java.lang.String

      number    java.lang.Number

      true|false   ava.lang.Boolean

      array     java.util.List( java.util.List的具体类是具体类 org.json.simple.JSONArray )

      Object     java.util.Map(java.util.Map 是org.json.simple.JSONObject)

      null      null

    自定义JsonUtil类:(需要引入org.apache.commons.logging.jar文件的支持)

    import java.beans.IntrospectionException;
    import java.beans.Introspector;
    import java.beans.PropertyDescriptor;
    import java.text.SimpleDateFormat;
    import java.util.Date;
    import java.util.List;
    import java.util.Map;
    import java.util.Set;
    
    public class JsonUtil {
    
    	/**
    	 * 序列化对象为JSON格式 遵循JSON组织公布标准
    	 * 
    	 * @date 2008/05/07
    	 * @version 1.0.0
    	 */
    	/** Commons Logging instance. */
    	private static org.apache.commons.logging.Log log = org.apache.commons.logging.LogFactory
    			.getLog(JsonUtil.class);
    
    	/**
    	 * @param obj
    	 *            任意对象
    	 * @return String
    	 */
    	public static String object2json(Object obj) {
    		StringBuilder json = new StringBuilder();
    		if (obj == null) {
    			json.append("""");
    		} else if (obj instanceof String
    				|| obj instanceof Integer
    				|| obj instanceof Boolean
    			    || obj instanceof Double
    				|| obj instanceof Long 
    				|| obj instanceof Float 
    				|| obj instanceof Integer 
    				|| obj instanceof Character 
    				|| obj instanceof Byte 
    		) {
    			json.append(""").append(string2json(obj.toString())).append(""");
    		} 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 if (obj instanceof Date) {
    			Date date =(Date) obj;
    			SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    			json.append(""").append(sdf.format(date)).append(""");
    		} else {
    			json.append(bean2json(obj));
    		}
    		return json.toString();
    	}
    
    	/**
    	 * @param bean
    	 *            bean对象
    	 * @return String
    	 */
    	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) {
    					log.error(e);
    				}
    			}
    			json.setCharAt(json.length() - 1, '}');
    		} else {
    			json.append("}");
    		}
    		return json.toString();
    	}
    
    	/**
    	 * @param list
    	 *            list对象
    	 * @return String
    	 */
    	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();
    	}
    
    	/**
    	 * @param array
    	 *            对象数组
    	 * @return String
    	 */
    	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();
    	}
    
    	/**
    	 * @param map
    	 *            map对象
    	 * @return String
    	 */
    	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();
    	}
    
    	/**
    	 * @param set
    	 *            集合对象
    	 * @return String
    	 */
    	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();
    	}
    
    	/**
    	 * @param s
    	 *            参数
    	 * @return String
    	 */
    	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 '':
    				sb.append("\b");
    				break;
    			case 'f':
    				sb.append("\f");
    				break;
    			case '
    ':
    				sb.append("\n");
    				break;
    			case '
    ':
    				sb.append("\r");
    				break;
    			case '	':
    				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();
    	}
    }
    

    使用jackson转换java类与json:

      需要的Entity:

        

    public class Student {
    	
    	private String name;
    	
    	private Integer age;
    
    	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;
    	}
    }
    

      用jackson转换java类与json的JsonUtils类:

    import org.codehaus.jackson.map.ObjectMapper;
    
    public class JsonUtils {
    	
    	static ObjectMapper objectMapper;
    	/**
    	 * 使用泛型方法,把json字符串转换为相应的JavaBean对象。
    	 * 转换为普通JavaBean:readValue(json,Student.class)
    	 * 转换为List:readValue(json,List.class
    	 * ).但是如果我们想把json转换为特定类型的List,比如List<Student>,就不能直接进行转换了。
    	 * 因为readValue(json,List
    	 * .class)返回其实是List<Map>类型,你不能指定readValue()的第二个参数是List<Student
    	 * >.class,所以不能直接转换。
    	 * 我们可以把readValue()的第二个参数传递为Student[].class.然后使用Arrays.asList
    	 * ();方法把得到的数组转换为特定类型的List。 转换为Map:readValue(json,Map.class) 我们使用泛型,得到的也是泛型
    	 * 
    	 * @param content
    	 *            要转换的JavaBean类型
    	 * @param valueType
    	 *            原始json字符串数据
    	 * @return JavaBean对象
    	 */
    	public static <T> T readValue(String content, Class<T> valueType) {
    		if (objectMapper == null) {
    			objectMapper = new ObjectMapper();
    		}
    		try {
    			return objectMapper.readValue(content, valueType);
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
    
    		return null;
    	}
    
    	/**
    	 * 把JavaBean转换为json字符串 普通对象转换:toJson(Student) List转换:toJson(List)
    	 * Map转换:toJson(Map) 我们发现不管什么类型,都可以直接传入这个方法
    	 * 
    	 * @param object
    	 *            JavaBean对象
    	 * @return json字符串
    	 */
    	public static String toJSon(Object object) {
    		if (objectMapper == null) {
    			objectMapper = new ObjectMapper();
    		}
    		try {
    			return objectMapper.writeValueAsString(object);
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
    
    		return null;
    	}
    }
    

      main方法测试类:

    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    
    import org.apache.log4j.Logger;
    
    public class Log4jTest {
    
        private static final Logger logger = Logger.getLogger(Log4jTest.class);
        
        public static void main(String[] args) {
        	try {
        		List<Student> list = new ArrayList<Student>();
        		Student s = new Student();
        		s.setName("小明");
        		s.setAge(11);
        		Student s2 = new Student();
        		s2.setName("小红");
        		s2.setAge(22);
        		list.add(s);
        		list.add(s2);
        		
        		Map<String , String> map = new HashMap<String , String>();
        		map.put("1", "a");
        		map.put("2", "b");
        		map.put("3", "c");
        		/**
        		 * 使用jackson转换javaBean,list,map为json字符串
        		 */
        		System.out.println(JsonUtils.toJSon(s));
        		System.out.println(JsonUtils.toJSon(list));
        		System.out.println(JsonUtils.toJSon(map));
        		
        		String strJson = "{"name":"小明","age":11}";
        		Student student = JsonUtils.readValue(strJson, Student.class);
        		System.out.println(student.getName()+student.getAge());
        		
        		System.out.println("****将Json字符串转换为List集合************");
        		String strJson1 = "[{"name":"小明","age":"11"},{"name":"小明","age":"11"}]";
        		System.out.println(JsonUtils.readValue(strJson1, List.class));
        		
        		System.out.println("****将Json字符串转换为javaBean数组************");
        		String strJsonArr = "[{"name":"小明","age":11},{"name":"小明","age":11},{"name":"小明","age":11}]";
        		Student[] studentArr = JsonUtils.readValue(strJsonArr, Student[].class);
        		for (Student student2 : studentArr) {
    				System.out.println(student2.getAge());
    			}
        		
        		System.out.println("****将Json字符串转换为Map集合************");
        		String strJsonMap = "{"one":{"name":"小明","age":11},"two":{"name":"小明","age":11},"three":{"name":"小明","age":11}}";
        		Map<String,Map<String,Object>> jsonMap = JsonUtils.readValue(strJsonMap, Map.class);
        		System.out.println(jsonMap);
    		} catch (Exception e) {
    			logger.error("This is debug message.",e);
    		}
        }
    }
    

      

    到这里下载代码:gitHub下载源代码 (记得在E:盘下建test.log文件记录log4j日志哦!)

  • 相关阅读:
    使用ansible 批量分发ssh密钥
    修改DNS
    如何使用openssl生成RSA公钥和私钥对
    压力测试 php-fpm 优化
    mysql 安装
    svn 权限配置
    powerdesigner导出word
    Mysql无法创建外键的原因
    office project 激活
    MySQL日志恢复误删记录
  • 原文地址:https://www.cnblogs.com/ablejava/p/5569548.html
Copyright © 2011-2022 走看看