java中Array/List/Map/Object与Json互相转换详解

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 plain  copy
  1. [  
  2.     true,  
  3.     false,  
  4.     true  
  5. ]  

Address类:

[java]  view plain  copy
  1. /**    
  2.  * @Title: 创建Address实体类的POJO 
  3.  * @Description: TODO(用一句话描述该文件做什么) 
  4.  * @author Potter    
  5.  * @date 2013-2-18 上午10:16:03 
  6.  * @version V1.0    
  7.  */  
  8.   
  9. public class Address {  
  10.     private String street;//街道  
  11.     private String city;//城市  
  12.     private int zip;//邮编  
  13.     private String tel;//第一个电话号码  
  14.     private String telTwo;//第二个电话号码  
  15.   
  16.     public Address() {  
  17.     }  
  18.   
  19.     public Address(String street, String city, int zip, String tel, String telTwo){  
  20.         this.street = street;  
  21.         this.city = city;  
  22.         this.zip = zip;  
  23.         this.tel = tel;  
  24.         this.telTwo = telTwo;  
  25.     }  
  26.       
  27.     public String getStreet() {  
  28.         return street;  
  29.     }  
  30.   
  31.     public void setStreet(String street) {  
  32.         this.street = street;  
  33.     }  
  34.   
  35.     public String getCity() {  
  36.         return city;  
  37.     }  
  38.   
  39.     public void setCity(String city) {  
  40.         this.city = city;  
  41.     }  
  42.   
  43.     public int getZip() {  
  44.         return zip;  
  45.     }  
  46.   
  47.     public void setZip(int zip) {  
  48.         this.zip = zip;  
  49.     }  
  50.   
  51.     public String getTel() {  
  52.         return tel;  
  53.     }  
  54.   
  55.     public void setTel(String tel) {  
  56.         this.tel = tel;  
  57.     }  
  58.   
  59.     public String getTelTwo() {  
  60.         return telTwo;  
  61.     }  
  62.   
  63.     public void setTelTwo(String telTwo) {  
  64.         this.telTwo = telTwo;  
  65.     }  
  66. }  

 

JsonTest类:

[java]  view plain  copy
  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.         System.out.println(((JSONArray) jsArr.get(6)).get(0));  
  73.     }  
  74.   
  75.     /** 
  76.      * javaMpa和Json互转 
  77.      */  
  78.     public static void javaMapAndJsonInterChange() {  
  79.         Map map = new LinkedHashMap();  
  80.         map.put("integer"new Integer(1));  
  81.         map.put("boolean"new Boolean(true));  
  82.         map.put("char"new Character('j'));  
  83.         map.put("charArr"new char[] { 'j''s''o''n' });  
  84.         // 注:不能以null为键名,否则运行报net.sf.json.JSONException:  
  85.         // java.lang.NullPointerException:  
  86.         // JSON keys must not be null nor the 'null' string.  
  87.         map.put("nullAttr"null);  
  88.   
  89.         map.put("str""json");  
  90.         map.put("strArr"new String[] { "json""-""lib" });  
  91.         map.put("jsonFunction"new JSONFunction(new String[] { "i" },"alert(i)"));  
  92.         map.put("address"new Address("P.O BOX 54534""Seattle, WA"42452,"561-832-3180""531-133-9098"));  
  93.         // map转JSONArray  
  94.         JSONObject jsObj = JSONObject.fromObject(map);  
  95.         System.out.println(jsObj.toString(4));  
  96.           
  97.         // 从JSON串到JSONObject  
  98.         jsObj = JSONObject.fromObject(jsObj.toString());  
  99.   
  100.         //第一种方式:从JSONObject里读取  
  101.         // print: json  
  102.         System.out.println(jsObj.get("str"));  
  103.         // print: address.city = Seattle, WA    
  104.         System.out.println("address.city = " + ((JSONObject) jsObj.get("address")).get("city"));    
  105.   
  106.           
  107.         //第二种方式:从动态Bean里读取数据,由于不能转换成具体的Bean,感觉没有多大用处  
  108.         MorphDynaBean mdBean = (MorphDynaBean) JSONObject.toBean(jsObj);  
  109.         // print: json  
  110.         System.out.println(mdBean.get("str"));  
  111.         //print: address.city = Seattle, WA    
  112.         System.out.println("address.city = " + ((MorphDynaBean) mdBean.get("address")).get("city"));    
  113.   
  114.     }  
  115.       
  116.     /** 
  117.      * javaObject和jsonObject互转 
  118.      */  
  119.     public static void  javaObjectAndJsonInterChange(){  
  120.         Address address=new Address("P.O BOX 54534""Seattle, WA"42452,"561-832-3180""531-133-9098");  
  121.         //object转JSONObject  
  122.         JSONObject jsObj = JSONObject.fromObject(address);  
  123.         System.out.println(jsObj.toString(4));  
  124.           
  125.         //JsonObject转java Object  
  126.           
  127.         Address addressResult=(Address) JSONObject.toBean(jsObj, Address.class);  
  128.         System.out.println("address.city = "+ addressResult.getCity());  
  129.         System.out.println("address.street="+addressResult.getStreet());  
  130.         System.out.println("address.tel = "+ addressResult.getTel());  
  131.         System.out.println("address.telTwo="+addressResult.getTelTwo());  
  132.         System.out.println("address.zip="+addressResult.getZip());  
  133.     }  
  134.   
  135.     /** 
  136.      * 读取json文件 
  137.      * @param fileName 文件名,不需要后缀 
  138.      * @return 
  139.      */  
  140.     public static String readJson(String fileName) {  
  141.         String result = null;  
  142.         try {  
  143.             File myFile = new File("./config/" + fileName + ".json");  
  144.             FileReader fr = new FileReader(myFile);  
  145.             char[] contents = new char[(int) myFile.length()];  
  146.             fr.read(contents, 0, (int) myFile.length());  
  147.             result = new String(contents);  
  148.             fr.close();  
  149.         } catch (FileNotFoundException e) {  
  150.             e.printStackTrace();  
  151.         } catch (IOException e) {  
  152.             e.printStackTrace();  
  153.         }  
  154.         return result;  
  155.     }  
  156. }  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值