JSON(JavaScript Object Notation): 是一种轻量级的数据交换格式

一、JSON建构有两种结构:对象和数组

1、对象:对象在js中表示为“{}”扩起来的内容,数据结构为 {key:value,key:value,...}的键值对的结构,在面向对象的语言中,key为对象的属性,value为对应的属性值,所以很容易理解,取值方法为 对象.key 获取属性值,这个属性值的类型可以是 数字、字符串、数组、对象几种。

2、数组:数组在js中是中括号“[]”扩起来的内容,数据结构为 ["java","javascript","vb",...],取值方式和所有语言中一样,使用索引获取,字段值的类型可以是 数字、字符串、数组、对象几种。

经过对象、数组2种结构就可以组合成复杂的数据结构了。

二、具体形式

1、对象

(1)一个对象以“{”(左括号)开始,“}”(右括号)结束。

(2)每个“名称”后跟一个“:”(冒号)

(3)“‘名称/值’ 对”之间使用“,”(逗号)分隔

例子:表示人的一个对象:

{

"姓名" : "大憨",

"年龄" : 24

}

2、数组是值(value)的有序集合。

(1)一个数组以“[”(左中括号)开始,“]”(右中括号)结束。

(2)值之间使用“,”(逗号)分隔。

例子:一组学生

{

"学生" :

[

{"姓名" : "小明" , "年龄" : 23},

{"姓名" : "大憨" , "年龄" : 24}

]

}

说明:此Json对象包括了一个学生数组,而学生数组中的值又是两个Json对象。

说了这些基本了解json的数据结构了...

补充:在线Json校验格式化工具:http://www.bejson.com/go.php?u=http://www.bejson.com/index.php

三、老样子上次demo

这时我的工程结构图:上面引用到的外部库大家网上搜索下载~

configdata.json:

 

[javascript] view plaincopy

  1. [  

  2.     true,  

  3.     false,  

  4.     true  

  5. ]  

JsonTest类:

[java] view plaincopy

  1. import java.io.File;  

  2. import java.io.FileNotFoundException;  

  3. import java.io.FileReader;  

  4. import java.io.IOException;  

  5. import java.util.ArrayList;  

  6. import java.util.LinkedHashMap;  

  7. import java.util.List;  

  8. import java.util.Map;  

  9.   

  10. import net.sf.ezmorph.bean.MorphDynaBean;  

  11. import net.sf.json.JSONArray;  

  12. import net.sf.json.JSONFunction;  

  13. import net.sf.json.JSONObject;  

  14.   

  15. public class JsonTest {  

  16.   

  17.     public static void main(String args[]) {  

  18.         //javaArray和json互相转换  

  19.         javaArrayAndJsonInterChange();  

  20.         System.out.println("-------------------------------------");  

  21.         //javaList和json互相转换  

  22.         javaListAndJsonInterChange();  

  23.         System.out.println("-------------------------------------");  

  24.         //javaMpa和Json互转  

  25.         javaMapAndJsonInterChange();  

  26.         System.out.println("-------------------------------------");  

  27.         //javaObject和jsonObject互转  

  28.         javaObjectAndJsonInterChange();  

  29.     }  

  30.   

  31.     /** 

  32.      * javaArray和json互相转换 

  33.      */  

  34.     public static void javaArrayAndJsonInterChange() {  

  35.         // java 转数组  

  36.         boolean[] boolArray = new boolean[] { truefalsetrue };  

  37.         JSONArray jsonArray = JSONArray.fromObject(boolArray);  

  38.         String s = jsonArray.toString();  

  39.         System.out.println(s);  

  40.   

  41.         // 通过json获取数组中的数据  

  42.         String result = readJson("configdata");  

  43.   

  44.         JSONArray jsonR = JSONArray.fromObject(result);  

  45.         int size = jsonR.size();  

  46.         for (int i = 0; i < size; i++) {  

  47.             System.out.println(jsonR.get(i));  

  48.         }  

  49.     }  

  50.   

  51.     /** 

  52.      * javaList和json互相转换 

  53.      */  

  54.     public static void javaListAndJsonInterChange() {  

  55.         List list = new ArrayList();  

  56.         list.add(new Integer(1));  

  57.         list.add(new Boolean(true));  

  58.         list.add(new Character('j'));  

  59.         list.add(new char[] { 'j''s''o''n' });  

  60.         list.add(null);  

  61.         list.add("json");  

  62.         list.add(new String[] { "json""-""lib" });  

  63.   

  64.         // list转JSONArray  

  65.         JSONArray jsArr = JSONArray.fromObject(list);  

  66.         System.out.println(jsArr.toString(4));  

  67.   

  68.         // 从JSON串到JSONArray  

  69.         jsArr = JSONArray.fromObject(jsArr.toString());  

  70.         // --从JSONArray里读取  

  71.         // print: json  

  72.           List<ComplaintFusionGb>   list=JSONArray.toList(JSONArray.fromObject(jsArr), new ComplaintFusionGb(), new JsonConfig());  

  73.         System.out.println(((JSONArray) jsArr.get(6)).get(0));  

  74.     }  

  75.   

  76.     /** 

  77.      * javaMpa和Json互转 

  78.      */  

  79.     public static void javaMapAndJsonInterChange() {  

  80.         Map map = new LinkedHashMap();  

  81.         map.put("integer"new Integer(1));  

  82.         map.put("boolean"new Boolean(true));  

  83.         map.put("char"new Character('j'));  

  84.         map.put("charArr"new char[] { 'j''s''o''n' });  

  85.         // 注:不能以null为键名,否则运行报net.sf.json.JSONException:  

  86.         // java.lang.NullPointerException:  

  87.         // JSON keys must not be null nor the 'null' string.  

  88.         map.put("nullAttr"null);  

  89.   

  90.         map.put("str""json");  

  91.         map.put("strArr"new String[] { "json""-""lib" });  

  92.         map.put("jsonFunction"new JSONFunction(new String[] { "i" },"alert(i)"));  

  93.         map.put("address"new Address("P.O BOX 54534""Seattle, WA"42452,"561-832-3180""531-133-9098"));  

  94.         // map转JSONArray  

  95.         JSONObject jsObj = JSONObject.fromObject(map);  

  96.         System.out.println(jsObj.toString(4));  

  97.           

  98.         // 从JSON串到JSONObject  

  99.         jsObj = JSONObject.fromObject(jsObj.toString());  

  100.   

  101.         //第一种方式:从JSONObject里读取  

  102.         // print: json  

  103.         System.out.println(jsObj.get("str"));  

  104.         // print: address.city = Seattle, WA    

  105.         System.out.println("address.city = " + ((JSONObject) jsObj.get("address")).get("city"));    

  106.   

  107.           

  108.         //第二种方式:从动态Bean里读取数据,由于不能转换成具体的Bean,感觉没有多大用处  

  109.         MorphDynaBean mdBean = (MorphDynaBean) JSONObject.toBean(jsObj);  

  110.         // print: json  

  111.         System.out.println(mdBean.get("str"));  

  112.         //print: address.city = Seattle, WA    

  113.         System.out.println("address.city = " + ((MorphDynaBean) mdBean.get("address")).get("city"));    

  114.   

  115.     }  

  116.       

  117.     /** 

  118.      * javaObject和jsonObject互转 

  119.      */  

  120.     public static void  javaObjectAndJsonInterChange(){  

  121.         Address address=new Address("P.O BOX 54534""Seattle, WA"42452,"561-832-3180""531-133-9098");  

  122.         //object转JSONObject  

  123.         JSONObject jsObj = JSONObject.fromObject(address);  

  124.         System.out.println(jsObj.toString(4));  

  125.           

  126.         //JsonObject转java Object  

  127.           

  128.         Address addre***esult=(Address) JSONObject.toBean(jsObj, Address.class);  

  129.         System.out.println("address.city = "+ addre***esult.getCity());  

  130.         System.out.println("address.street="+addre***esult.getStreet());  

  131.         System.out.println("address.tel = "+ addre***esult.getTel());  

  132.         System.out.println("address.telTwo="+addre***esult.getTelTwo());  

  133.         System.out.println("address.zip="+addre***esult.getZip());  

  134.     }  

  135.   

  136.     /** 

  137.      * 读取json文件 

  138.      * @param fileName 文件名,不需要后缀 

  139.      * @return 

  140.      */  

  141.     public static String readJson(String fileName) {  

  142.         String result = null;  

  143.         try {  

  144.             File myFile = new File("./config/" + fileName + ".json");  

  145.             FileReader fr = new FileReader(myFile);  

  146.             char[] contents = new char[(int) myFile.length()];  

  147.             fr.read(contents, 0, (int) myFile.length());  

  148.             result = new String(contents);  

  149.             fr.close();  

  150.         } catch (FileNotFoundException e) {  

  151.             e.printStackTrace();  

  152.         } catch (IOException e) {  

  153.             e.printStackTrace();  

  154.         }  

  155.         return result;  

  156.     }  

  157. }