JS和JAVA使用JSON方法解析

一.JS部分==================

将json字符串转换为json对象的方法。在数据传输过程中,json是以文本,即字符串的形式传递的,而JS操作的是JSON对象,所以,JSON对象和JSON字符串之间的相互转换是关键。

例如:
JSON字符串:
[javascript]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. var str1 = '{ "name": "cxh", "sex": "man" }';  
JSON对象:
[javascript]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. var str2 = { "name""cxh""sex""man" };  

一、JSON字符串转换为JSON对象
要使用上面的str1,必须使用下面的方法先转化为JSON对象:
[javascript]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. //由JSON字符串转换为JSON对象  
  2. var obj = eval('(' + str + ')');  
或者
[javascript]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. //由JSON字符串转换为JSON对象  
  2. var obj = str.parseJSON();   
或者
[javascript]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. //由JSON字符串转换为JSON对象  
  2. var obj = JSON.parse(str);   
然后,就可以这样读取:
[javascript]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. Alert(obj.name);  
  2.   
  3. Alert(obj.sex);  
特别注意:如果obj本来就是一个JSON对象,那么使用eval()函数转换后(哪怕是多次转换)还是JSON对象,但是使用parseJSON()函数处理后会有问题(抛出语法异常)。
二、可以使用toJSONString()或者全局方法JSON.stringify()将JSON对象转化为JSON字符串。

例如:
[javascript]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. //将JSON对象转化为JSON字符  
  2. var last=obj.toJSONString();   
或者
[javascript]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. //将JSON对象转化为JSON字符  
  2. var last=JSON.stringify(obj);   
  3.   
  4. alert(last);  
注意:

上面的几个方法中,除了eval()函数是js自带的之外,其他的几个方法都来自json.js包。新版本的 JSON 修改了 API,将 JSON.stringify() 和 JSON.parse() 两个方法都注入到了 JavaScript 的内建对象里面,前者变成了 Object.toJSONString(),而后者变成了 String.parseJSON()。如果提示找不到toJSONString()和parseJSON()方法,则说明您的json包版本太低。

二.Java部分===============
1. json-lib是一个java类库,提供将Java对象,包括beans, maps, collections, Java arrays and XML等转换成JSON,或者反向转换的功能。
2. json-lib 主页 : http://json-lib.sourceforge.NET/
3.执行环境
     需要以下类库支持(Maven构建)

[html]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. pom.xml  
  2. <dependency>  
  3. <groupId>net.sf.json-lib</groupId>  
  4. <artifactId>json-lib</artifactId>  
  5. <version>2.4</version>  
  6. <classifier>jdk15</classifier>  
  7. </dependency>  
 下表中是Java与JavaScript类型对应关系。

代码示例:

注:在将 Json 形式的字符串转换为 JavaBean 的时候需要注意 JavaBean 中必须有无参构造函数,否则会报如下找不到初始化方法的错误

JavaBean代码:

[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. package com.ppl.jsonconvert;  
  2.   
  3. public class Student {//姓名  
  4.     private String name;  
  5.     //年龄  
  6.     private String age;  
  7.     //住址  
  8.     private String address;  
  9.   
  10.     //在将 Json 形式的字符串转换为 JavaBean 的时候需要注意 JavaBean 中必须有无参构造函数,否则会报如下找不到初始化方法的错误  
  11.     public Student() {  
  12.         super();  
  13.     }  
  14.     public Student(String name, String age, String address) {  
  15.         super();  
  16.         this.name = name;  
  17.         this.age = age;  
  18.         this.address = address;  
  19.     }  
  20.     public String getName() {  
  21.     return name;  
  22.     }  
  23.     public void setName(String name) {  
  24.     this.name = name;  
  25.     }  
  26.     public String getAge() {  
  27.     return age;  
  28.     }  
  29.     public void setAge(String age) {  
  30.     this.age = age;  
  31.     }  
  32.     public String getAddress() {  
  33.     return address;  
  34.     }  
  35.     public void setAddress(String address) {  
  36.     this.address = address;  
  37.     }  
  38.     @Override  
  39.     public String toString() {  
  40.     return "Student [name=" + name + ", age=" + age + ", address="  
  41.     + address + "]";  
  42.     }  
  43.     }  

提供两个工具类,json转换map的实现方法,有点儿简单,应付简单的需求没问题

[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. /*** 
  2.      * 将json格式的字符串解析成Map对象  
  3.      * @param object 
  4.      *   JSON字符串 
  5.      * @return Map集合 
  6.      */  
  7.    public static Map<String, String> toHashMap(Object object)  
  8.    {  
  9.     LinkedHashMap<String, String> dataMap = new LinkedHashMap<String, String>();  
  10.        // 将json字符串转换成jsonObject  
  11.        JSONObject jsonObject = JSONObject.fromObject(object);  
  12.        Iterator it = jsonObject.keys();  
  13.        // 遍历jsonObject数据,添加到Map对象  
  14.        while (it.hasNext())  
  15.        {  
  16.            String key = String.valueOf(it.next());  
  17.            String value = (String) jsonObject.get(key);  
  18.            dataMap.put(key, value);  
  19.        }  
  20.        return dataMap;  
  21.    }  

[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. /** 
  2.   *  
  3.  * json转换map. 
  4.  * <br>详细说明 
  5.  * @param jsonStr json字符串 
  6.  * @return 
  7.  * @return Map<String,Object> 集合 
  8.  * @throws 
  9.  * @author slj 
  10.   */  
  11.   public static Map<String, Object> parseJSON2Map(String jsonStr){  
  12.       ListOrderedMap map = new ListOrderedMap();  
  13.       //最外层解析  
  14.       JSONObject json = JSONObject.fromObject(jsonStr);  
  15.       for(Object k : json.keySet()){  
  16.           Object v = json.get(k);   
  17.           //如果内层还是数组的话,继续解析  
  18.           if(v instanceof JSONArray){  
  19.               List<Map<String, Object>> list = new ArrayList<Map<String,Object>>();  
  20.               Iterator<JSONObject> it = ((JSONArray)v).iterator();  
  21.               while(it.hasNext()){  
  22.                   JSONObject json2 = it.next();  
  23.                   list.add(parseJSON2Map(json2.toString()));  
  24.               }  
  25.               map.put(k.toString(), list);  
  26.           } else {  
  27.               map.put(k.toString(), v);  
  28.           }  
  29.       }  
  30.       return map;  
  31.   }  

测试代码:

[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. package com.ppl.jsonconvert;  
  2.   
  3. import java.util.ArrayList;  
  4. import java.util.HashMap;  
  5. import java.util.LinkedHashMap;  
  6. import java.util.List;  
  7. import java.util.Map;  
  8.   
  9. import com.ppl.json.commons.JsonUtils;  
  10.   
  11. import net.sf.json.JSONArray;  
  12. import net.sf.json.JSONObject;  
  13.   
  14. public class Test {  
  15.   
  16.     @SuppressWarnings({ "unused""rawtypes""unchecked" })  
  17.     public static void main(String[] args) {  
  18.           
  19.         ///******************************  
  20.         //普通java实体类转化为JSON字符串形式  
  21.         ///******************************  
  22.         Student stu=new Student();  
  23.         stu.setName("JSON");  
  24.         stu.setAge("23");  
  25.         stu.setAddress("北京市西城区");  
  26.           
  27.         //1、使用JSONObject  
  28.         JSONObject jsonObject = JSONObject.fromObject(stu);  
  29.         String strJson=jsonObject.toString();  
  30.           
  31.         //strJson:{"address":"北京市西城区","age":"23","name":"JSON"}  
  32.         System.out.println("strJson:"+strJson);  
  33.           
  34.         //2、使用JSONArray  
  35.         JSONArray jsonArray=JSONArray.fromObject(stu);    
  36.         String strArray=jsonArray.toString();  
  37.           
  38.         //strArray:[{"address":"北京市西城区","age":"23","name":"JSON"}]  
  39.         System.out.println("strArray:"+strArray);  
  40.         //  
  41.           
  42.           
  43.         ///******************************  
  44.         //JSON字符串--》》java对象  
  45.         ///******************************  
  46.           
  47.         //定义两种不同格式的字符串  
  48.         String objectStr="{\"name\":\"JSONStu1\",\"age\":\"18\",\"address\":\"北京市西城区\"}";  
  49.         String arrayStr="[{\"name\":\"JSONStu2\",\"age\":\"22\",\"address\":\"济南市历城区\"}]";  
  50.         //1、使用JSONObject--将文字列转换为JSON  
  51.           
  52.         JSONObject jsonObject2=JSONObject.fromObject(objectStr);  
  53.         Student stu2=(Student)JSONObject.toBean(jsonObject2, Student.class);  
  54.         System.out.println("stu2:"+stu2);  
  55.           
  56.         //2、使用JSONArray--将文字列转换为JSON  
  57.         JSONArray jsonArray2=JSONArray.fromObject(arrayStr);  
  58.         //获得jsonArray的第一个元素  
  59.         Object o=jsonArray2.get(0);  
  60.         JSONObject jsonObject3=JSONObject.fromObject(o);  
  61.         Student stu3=(Student)JSONObject.toBean(jsonObject3, Student.class);  
  62.           
  63.         System.out.println("stu3:"+stu3);  
  64.           
  65.           
  66.         ///******************************  
  67.         //Map转换成json, 大多使用jsonObject(注1)  
  68.         ///******************************  
  69.         //不建议使用出自于 org.apache.commons.collections.OrderedMap  
  70.         //Map<String, Integer> ordermap = (Map<String, Integer>)new ListOrderedMap();  
  71.         //有序的Map  
  72.         Map ordermap = new LinkedHashMap<String, String>();  
  73.           
  74.         Map map = new HashMap<String,Object>();    
  75.         map.put( "name""json" );    
  76.         map.put( "bool", Boolean.TRUE );    
  77.         map.put( "int"new Integer(1) );    
  78.         map.put( "arr"new String[]{"a","b"} );    
  79.         map.put( "func""function(i){ return this.arr[i]; }" );    
  80.             
  81.         JSONObject jsonObjectMap = JSONObject.fromObject( map );    
  82.         System.out.println( "Map转换成json:"+jsonObjectMap );    
  83.           
  84.         //注1示例详解  
  85.         Student stu4=new Student("JSON","28","上海");  
  86.            
  87.         Map<String,Student> map4=new HashMap<String,Student>();  
  88.         map4.put("first", stu4);  
  89.         //1、JSONObject  
  90.         JSONObject mapObject=JSONObject.fromObject(map4);  
  91.         System.out.println("mapObject"+mapObject.toString());  
  92.         //2、JSONArray  
  93.         JSONArray mapArray=JSONArray.fromObject(map4);  
  94.         System.out.println("mapArray:"+mapArray.toString());  
  95.           
  96.           
  97.       ///******************************  
  98.       //list--》》json字符串,使用JSONArray  
  99.       ///******************************  
  100.         Student stu5=new Student("student1","16","jinan");  
  101.         Student stu6=new Student("student2","26","qingdao");  
  102.         List<Student> lists=new ArrayList<Student>();  
  103.         lists.add(stu5);  
  104.         lists.add(stu6);  
  105.         //1、 使用JSONArray  
  106.         JSONArray listArray=JSONArray.fromObject(lists);  
  107.            
  108.         System.out.println("listArray:"+listArray.toString());  
  109.           
  110.       ///******************************  
  111.         //json字符串--》》list  
  112.         ///******************************  
  113.         String arrayStr2="[{\"name\":\"JSON\",\"age\":\"24\",\"address\":\"济南高新区\"}]";  
  114.       //转化为list  
  115.       List<Student> list2=(List<Student>)JSONArray.toList(JSONArray.fromObject(arrayStr2), Student.class);  
  116.       for (Student stus : list2) {  
  117.           System.out.println(stus);  
  118.           }  
  119.         
  120.       //最新的方法json字符串--》》list  
  121.       JSONArray jsonArrayT = JSONArray.fromObject(arrayStr2);   
  122.       List<Student> listData = (List) JSONArray.toCollection(jsonArrayT, Student.class);   
  123.       for (Student stus : listData) {  
  124.           System.out.println("listData: "+stus);  
  125.           }  
  126.       //转化为数组  
  127.       Student[] ss =(Student[])JSONArray.toArray(JSONArray.fromObject(arrayStr),Student.class);  
  128.       for (Student student : ss) {  
  129.       System.out.println(student);  
  130.       
  131.       }  
  132.         
  133.         
  134.     ///******************************  
  135.       //json字符串--》》Map  
  136.       ///******************************  
  137.         
  138.       //BUG___________________TODO----------BUG  
  139.       String strObject="{\"KEY\":{\"address\":\"中国上海\",\"age\":\"23\",\"name\":\"JSON\"}}";  
  140.       Map<String, String> dataMap = JsonUtils.toHashMap(strObject);  
  141.       System.out.println(dataMap.toString());  
  142.      }  
  143.   
  144. }  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值