json入门教程+在java中的一些便捷操作

原文地址:http://blog.csdn.net/jelly_8090/article/details/8178524

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,非常适合于服务器与 JavaScript的交互。相比XML,他更易于人阅读和编写,它是JavaScript的一个子集。 JSON采用完全独立于语言的文本格式,可以在流行的语言中使用,比如C# Java C++ VB。这些特性使JSON成为理想的数据交换语言。

一、Json的构建结构

   1. “/对的集合(A collection of name/value pairs)。不同的语言中,它被理解为对象(object),记录(record),结构(struct),字典dictionary),哈希表hash table),有键列表(keyed list),或者关联数组associative array)。

2. 值的有序列表(An ordered list of values)。在大部分语言中,它被理解为数组(array)。

这些都是常见的数据结构。事实上大部分现代计算机语言都以某种形式支持它们。这使得一种数据格式在同样基于这些结构的编程语言之间交换成为可能。

二、JSon具体表现形式

1、对象是一个无序的“‘/集合。一个对象以“{”(左括号)开始,“}”(右括号)结束。每个名称后跟一个“:”(冒号);“‘名称/之间使用“,”(逗号)分隔。

2、数组是值(value)的有序集合。一个数组以“[”(左中括号)开始,“]”(右中括号)结束。值之间使用“,”(逗号)分隔。

3、值(value)可以是双引号括起来的字符(string)、数值(number)truefalse null、对象(object)或者数组(array)。这些结构可以嵌套。

4、字符串(string)是由双引号包围的任意数量Unicode字符的集合,使用反斜线转义。

一个字符(character)即一个单独的字符串(character string)。字符串(string)与C或者Java的字符串非常相似。

5、数值(number)也与C或者Java的数值非常相似。除去未曾使用的八进制与十六进制格式。除去一些编码细节。

在javascript中

[javascript] view plain copy print ?
  1. <script type="text/javascript">  
  2.     var json = "{name:'jack', age:20, city:{address:'北京市',street:'朝阳区'}}";  
  3.     alert(json.name);  
  4.     alert(json.age);  
  5.     alert(json.city.address + json.city.street);  
  6. </script>  
大家可以自己试试看!

三、JSon在Java中应用

废话不说直接上代码!!这里我用的Junit做的测试,如果不懂的童鞋可以学习一下,我的演示相对简单。
  1. package com.jelly.json.test;  
  2.   
  3. import static org.junit.Assert.assertEquals;  
  4.   
  5. import java.util.ArrayList;  
  6. import java.util.Date;  
  7. import java.util.HashMap;  
  8. import java.util.List;  
  9. import java.util.Map;  
  10.   
  11. import net.sf.ezmorph.object.DateMorpher;  
  12. import net.sf.json.JSONArray;  
  13. import net.sf.json.JSONObject;  
  14. import net.sf.json.util.JSONUtils;  
  15.   
  16. import org.apache.commons.beanutils.PropertyUtils;  
  17. import org.junit.Test;  
  18.   
  19. import com.jelly.json.entity.MyBean;  
  20. import com.jelly.json.entity.Person;  
  21. import com.jelly.json.entity.Student;  
  22.   
  23. @SuppressWarnings("unchecked")  
  24. public class JsonTest {  
  25.       
  26.     private static void setDataFormat2JAVA(){  
  27.         //设定日期转换格式  
  28.         JSONUtils.getMorpherRegistry().registerMorpher(new DateMorpher(new String[] {"yyyy-MM-dd""yyyy-MM-dd HH:mm:ss"}));  
  29.     }   
  30.       
  31.     //json转成Object  
  32.     @Test  
  33.     public void testJsonToObj(){  
  34.         String json = "{id:'1001',name:'张三',age:22}";  
  35.         Student stu = null;  
  36.         setDataFormat2JAVA();  
  37.         JSONObject obj = JSONObject.fromObject(json);  
  38.         stu = (Student)JSONObject.toBean(obj, Student.class);  
  39.         System.out.println(stu);  
  40.     }  
  41.       
  42.     //从一个JSON数组得到一个java对象数组  
  43.     @Test  
  44.     public void testJsonArrToArray(){  
  45.         String jsonStus = "[{id:1,name:'jack',age:20},{id:2,name:'rose',age:20},{id:3,name:'admin',age:20}]";  
  46.         JSONArray array = JSONArray.fromObject(jsonStus);  
  47.         Student[] stu = new Student[array.size()];  
  48.         for(int i = 0; i < array.size(); i++){  
  49.             JSONObject jsonObject = array.getJSONObject(i);  
  50.             stu[i] = (Student)JSONObject.toBean(jsonObject, Student.class);  
  51.         }  
  52.         System.out.println(stu[0]);  
  53.         System.out.println(stu[1]);  
  54.         System.out.println(stu[2]);  
  55.         //System.out.println(stu[3]);   会报错  
  56.     }  
  57.       
  58.     //从一个JSON数组得到一个java集合  
  59.     @Test  
  60.     public void testJsonArrToList(){  
  61.         String jsonStus = "[{id:1,name:'jack',age:20},{id:2,name:'rose',age:20},{id:3,name:'admin',age:20}]";  
  62.         JSONArray array = JSONArray.fromObject(jsonStus);  
  63.         List<Student> stu = new ArrayList<Student>();  
  64.         for(int i = 0; i < array.size(); i++){  
  65.             JSONObject jsonObject = array.getJSONObject(i);  
  66.             stu.add((Student)JSONObject.toBean(jsonObject, Student.class));  
  67.         }  
  68.         System.out.println(stu.get(0));  
  69.         System.out.println(stu.get(1));  
  70.         System.out.println(stu.get(2));  
  71.     }  
  72.     //从json数组中得到相应java数组   
  73.     @Test  
  74.     public void testArrayForJson(){  
  75.         String jsonString = "['q','c','d']";  
  76.         JSONArray jsonArray = JSONArray.fromObject(jsonString);  
  77.         Object[] strs = jsonArray.toArray();  
  78.         System.out.print(strs[0]);  
  79.         System.out.print(strs[1]);  
  80.         System.out.print(strs[2]);  
  81.     }  
  82.       
  83.     //字符串转换成json  
  84.     @Test  
  85.     public void testJsonStrToJSON(){  
  86.         String json = "['json','is','easy']";  
  87.         JSONArray jsonArray = JSONArray.fromObject( json );    
  88.         System.out.println( jsonArray );    
  89.         // prints ["json","is","easy"]    
  90.     }  
  91.       
  92.     //Map转换成json  
  93.     @Test  
  94.     public void testMapToJSON(){  
  95.         Map map = new HashMap();    
  96.         map.put( "name""jack" );    
  97.         map.put( "bool", Boolean.TRUE );    
  98.         map.put( "int"new Integer(1) );    
  99.         map.put( "arr"new String[]{"a","b"} );    
  100.         map.put( "func""function(i){ return this.arr[i]; }" );    
  101.           
  102.         JSONObject jsonObject = JSONObject.fromObject( map );    
  103.         System.out.println( jsonObject );  
  104.     }  
  105.       
  106.     //java对象转换为json格式  
  107.     @Test  
  108.     public void testObjToJson(){  
  109.         JSONObject obj2=new JSONObject();  
  110.         obj2.put("phone","123456");  
  111.         obj2.put("zip","7890");  
  112.         obj2.put("contact",obj2);  
  113.         System.out.print(obj2);  
  114.     }  
  115.       
  116.     //复合类型bean转成成json  
  117.     @Test  
  118.     public void testBeadToJSON(){  
  119.         MyBean bean = new MyBean();  
  120.         bean.setId("001");  
  121.         bean.setName("银行卡");  
  122.         bean.setDate(new Date());  
  123.           
  124.         List cardNum = new ArrayList();  
  125.         cardNum.add("农行");  
  126.         cardNum.add("工行");  
  127.         cardNum.add("建行");  
  128.         cardNum.add(new Person("test"));  
  129.           
  130.         bean.setCardNum(cardNum);  
  131.           
  132.         JSONObject jsonObject = JSONObject.fromObject(bean);  
  133.         System.out.println(jsonObject);  
  134.           
  135.     }  
  136.       
  137.     //一般数组转换成JSON  
  138.     @Test  
  139.     public void testArrayToJSON(){  
  140.         boolean[] boolArray = new boolean[]{true,false,true};    
  141.         JSONArray jsonArray = JSONArray.fromObject( boolArray );    
  142.         System.out.println( jsonArray );    
  143.     }  
  144.       
  145.     //Collection对象转换成JSON  
  146.     @Test  
  147.     public void testListToJSON(){  
  148.         List list = new ArrayList();    
  149.         list.add( "first" );  
  150.         list.add( "second" );  
  151.         JSONArray jsonArray = JSONArray.fromObject( list );    
  152.         System.out.println( jsonArray );    
  153.         // prints ["first","second"]    
  154.     }  
  155.       
  156.     //普通类型的json转换成对象  
  157.     @Test  
  158.     public void testJsonToObject() throws Exception{  
  159.         String json = "{name=\"json\",bool:true,int:1,double:2.2,func:function(a){ return a; },array:[1,2]}";    
  160.         JSONObject jsonObject = JSONObject.fromObject( json );   
  161.         System.out.println(jsonObject);  
  162.         Object bean = JSONObject.toBean( jsonObject );   
  163.         assertEquals( jsonObject.get( "name" ), PropertyUtils.getProperty( bean, "name" ) );    
  164.         assertEquals( jsonObject.get( "bool" ), PropertyUtils.getProperty( bean, "bool" ) );    
  165.         assertEquals( jsonObject.get( "int" ), PropertyUtils.getProperty( bean, "int" ) );    
  166.         assertEquals( jsonObject.get( "double" ), PropertyUtils.getProperty( bean, "double" ) );    
  167.         assertEquals( jsonObject.get( "func" ), PropertyUtils.getProperty( bean, "func" ) );    
  168.         System.out.println(PropertyUtils.getProperty(bean, "name"));  
  169.         System.out.println(PropertyUtils.getProperty(bean, "bool"));  
  170.         System.out.println(PropertyUtils.getProperty(bean, "int"));  
  171.         System.out.println(PropertyUtils.getProperty(bean, "double"));  
  172.         System.out.println(PropertyUtils.getProperty(bean, "func"));  
  173.         System.out.println(PropertyUtils.getProperty(bean, "array"));  
  174.           
  175.         List arrayList = (List)JSONArray.toCollection(jsonObject.getJSONArray("array"));  
  176.         for(Object object : arrayList){  
  177.             System.out.println(object);  
  178.         }  
  179.           
  180.     }  
  181.       
  182. }  

这是项目目录结构

源码已经传了,附带6个必须jar包,大家可以下载看看,免积分的!
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值