1、 JS 和 JAVA 使用 JSON 方法解析一.JS 部分 =将 json 字符串转换为 json 对象的方法。在数据传输过程中,json 是以文本,即字符串的形式传递的,而 JS 操作的是 JSON 对象,所以,JSON 对象和 JSON 字符串之间的相互转换是关键。例如:JSON 字符串:javascript view plain copy 在 CODE 上查看代码片派生到我的代码片var str1 = “name“: “cxh“, “sex“: “man“ ; JSON 对象:javascript view plain copy 在 CODE 上查看代码片派生到我的代码片var str
2、2 = “name“: “cxh“, “sex“: “man“ ; 一、JSON 字符串转换为 JSON 对象要使用上面的 str1,必须使用下面的方法先转化为 JSON 对象:javascript view plain copy 在 CODE 上查看代码片派生到我的代码片/由 JSON 字符串转换为 JSON 对象 var obj = eval( + str + ); 或者javascript view plain copy 在 CODE 上查看代码片派生到我的代码片/由 JSON 字符串转换为 JSON 对象 var obj = str.parseJSON(); 或者javascript
3、view plain copy 在 CODE 上查看代码片派生到我的代码片/由 JSON 字符串转换为 JSON 对象 var obj = JSON.parse(str); 然后,就可以这样读取:javascript view plain copy 在 CODE 上查看代码片派生到我的代码片Alert(obj.name); Alert(obj.sex); 特别注意:如果 obj 本来就是一个 JSON 对象,那么使用 eval()函数转换后(哪怕是多次转换)还是 JSON 对象,但是使用 parseJSON()函数处理后会有问题(抛出语法异常)。二、可以使用 toJSONString()或者全
4、局方法 JSON.stringify()将 JSON 对象转化为 JSON 字符串。例如:javascript view plain copy 在 CODE 上查看代码片派生到我的代码片/将 JSON 对象转化为 JSON 字符 var last=obj.toJSONString(); 或者javascript view plain copy 在 CODE 上查看代码片派生到我的代码片/将 JSON 对象转化为 JSON 字符 var last=JSON.stringify(obj); alert(last); 注意:上面的几个方法中,除了 eval()函数是 js 自带的之外,其他的几个方法
5、都来自 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 等
6、转换成 JSON,或者反向转换的功能。2. json-lib 主页 : http:/json-lib.sourceforge.NET/3.执行环境需要以下类库支持(Maven 构建)html view plain copy 在 CODE 上查看代码片派生到我的代码片pom.xml net.sf.json-lib json-lib 2.4 jdk15 下表中是 Java 与 JavaScript 类型对应关系。代码示例:注:在将 Json 形式的字符串转换为 JavaBean 的时候需要注意 JavaBean 中必须有无参构造函数,否则会报如下找不到初始化方法的错误JavaBean 代码:jav
7、a view plain copy 在 CODE 上查看代码片派生到我的代码片package com.ppl.jsonconvert; public class Student /姓名 private String name; /年龄 private String age; /住址 private String address; /在将 Json 形式的字符串转换为 JavaBean 的时候需要注意 JavaBean 中必须有无参构造函数,否则会报如下找不到初始化方法的错误 public Student() super(); public Student(String name, String
8、 age, String address) super(); this.name = name; this.age = age; this.address = address; public String getName() return name; public void setName(String name) this.name = name; public String getAge() return age; public void setAge(String age) this.age = age; public String getAddress() return address
9、; public void setAddress(String address) this.address = address; Override public String toString() return “Student name=“ + name + “, age=“ + age + “, address=“ + address + “; 提供两个工具类,json 转换 map 的实现方法,有点儿简单,应付简单的需求没问题java view plain copy 在 CODE 上查看代码片派生到我的代码片/* * 将 json 格式的字符串解析成 Map 对象 * param obj
10、ect * JSON 字符串 * return Map 集合 */ public static Map toHashMap(Object object) LinkedHashMap dataMap = new LinkedHashMap(); / 将 json 字符串转换成 jsonObject JSONObject jsonObject = JSONObject.fromObject(object); Iterator it = jsonObject.keys(); / 遍历 jsonObject 数据,添加到 Map 对象 while (it.hasNext() String key =
11、String.valueOf(it.next(); String value = (String) jsonObject.get(key); dataMap.put(key, value); return dataMap; java view plain copy 在 CODE 上查看代码片派生到我的代码片/* * * json 转换 map. * 详细说明 * param jsonStr json 字符串 * return * return Map 集合 * throws * author slj */ public static Map parseJSON2Map(String jsonS
12、tr) ListOrderedMap map = new ListOrderedMap(); /最外层解析 JSONObject json = JSONObject.fromObject(jsonStr); for(Object k : json.keySet() Object v = json.get(k); /如果内层还是数组的话,继续解析 if(v instanceof JSONArray) List list = new ArrayList(); Iterator it = (JSONArray)v).iterator(); while(Next() JSONObject json2
13、= it.next(); list.add(parseJSON2Map(json2.toString(); map.put(k.toString(), list); else map.put(k.toString(), v); return map; 测试代码:java view plain copy 在 CODE 上查看代码片派生到我的代码片package com.ppl.jsonconvert; import java.util.ArrayList; import java.util.HashMap; import java.util.LinkedHashMap; import java.
14、util.List; import java.util.Map; import mons.JsonUtils; import net.sf.json.JSONArray; import net.sf.json.JSONObject; public class Test SuppressWarnings( “unused“, “rawtypes“, “unchecked“ ) public static void main(String args) /* /普通 java 实体类转化为 JSON 字符串形式 /* Student stu=new Student(); stu.setName(“J
15、SON“); stu.setAge(“23“); stu.setAddress(“北京市西城区“); /1、使用 JSONObject JSONObject jsonObject = JSONObject.fromObject(stu); String strJson=jsonObject.toString(); /strJson:“address“:“北京市西城区“,“age“:“23“,“name“:“JSON“ System.out.println(“strJson:“+strJson); /2、使用 JSONArray JSONArray jsonArray=JSONArray.fro
16、mObject(stu); String strArray=jsonArray.toString(); /strArray:“address“:“北京市西城区“,“age“:“23“,“name“:“JSON“ System.out.println(“strArray:“+strArray); / /* /JSON 字符串-java 对象 /* /定义两种不同格式的字符串 String objectStr=“name“:“JSONStu1“,“age“:“18“,“address“:“北京市西城区“; String arrayStr=“name“:“JSONStu2“,“age“:“22“,“
17、address“:“济南市历城区“; /1、使用 JSONObject-将文字列转换为 JSON JSONObject jsonObject2=JSONObject.fromObject(objectStr); Student stu2=(Student)JSONObject.toBean(jsonObject2, Student.class); System.out.println(“stu2:“+stu2); /2、使用 JSONArray-将文字列转换为 JSON JSONArray jsonArray2=JSONArray.fromObject(arrayStr); /获得 jsonA
18、rray 的第一个元素 Object o=Array2.get(0); JSONObject jsonObject3=JSONObject.fromObject(o); Student stu3=(Student)JSONObject.toBean(jsonObject3, Student.class); System.out.println(“stu3:“+stu3); /* /Map 转换成 json, 大多使用 jsonObject(注 1) /* /不建议使用出自于 mons.collections.OrderedMap /Map ordermap = (Map)new ListOrd
19、eredMap(); /有序的 Map Map ordermap = new LinkedHashMap(); Map map = new HashMap(); map.put( “name“, “json“ ); map.put( “bool“, Boolean.TRUE ); map.put( “int“, new Integer(1) ); map.put( “arr“, new String“a“,“b“ ); map.put( “func“, “function(i) return this.arri; “ ); JSONObject jsonObjectMap = JSONObje
20、ct.fromObject( map ); System.out.println( “Map 转换成 json:“+jsonObjectMap ); /注 1 示例详解 Student stu4=new Student(“JSON“,“28“,“上海“); Map map4=new HashMap(); map4.put(“first“, stu4); /1、JSONObject JSONObject mapObject=JSONObject.fromObject(map4); System.out.println(“mapObject“+mapObject.toString(); /2、JS
21、ONArray JSONArray mapArray=JSONArray.fromObject(map4); System.out.println(“mapArray:“+mapArray.toString(); /* /list-json 字符串, 使用 JSONArray /* Student stu5=new Student(“student1“,“16“,“jinan“); Student stu6=new Student(“student2“,“26“,“qingdao“); List lists=new ArrayList(); lists.add(stu5); lists.add
22、(stu6); /1、 使用 JSONArray JSONArray listArray=JSONArray.fromObject(lists); System.out.println(“listArray:“+listArray.toString(); /* /json 字符串-list /* String arrayStr2=“name“:“JSON“,“age“:“24“,“address“:“济南高新区“; /转化为 list List list2=(List)JSONArray.toList(JSONArray.fromObject(arrayStr2), Student.class
23、); for (Student stus : list2) System.out.println(stus); /最新的方法 json 字符串-list JSONArray jsonArrayT = JSONArray.fromObject(arrayStr2); List listData = (List) JSONArray.toCollection(jsonArrayT, Student.class); for (Student stus : listData) System.out.println(“listData: “+stus); /转化为数组 Student ss =(Stud
24、ent)JSONArray.toArray(JSONArray.fromObject(arrayStr),Student.class); for (Student student : ss) System.out.println(student); /* /json 字符串-Map /* /BUG_TODO-BUG String strObject=“KEY“:“address“:“中国上海“,“age“:“23“,“name“:“JSON“; Map dataMap = JsonUtils.toHashMap(strObject); System.out.println(dataMap.toString();