一.JS部分==================
将json字符串转换为json对象的方法。在数据传输过程中,json是以文本,即字符串的形式传递的,而JS操作的是JSON对象,所以,JSON对象和JSON字符串之间的相互转换是关键。
例如:JSON字符串:
- var str1 = '{ "name": "cxh", "sex": "man" }';
- var str2 = { "name": "cxh", "sex": "man" };
一、JSON字符串转换为JSON对象
要使用上面的str1,必须使用下面的方法先转化为JSON对象:
- //由JSON字符串转换为JSON对象
- var obj = eval('(' + str + ')');
- //由JSON字符串转换为JSON对象
- var obj = str.parseJSON();
- //由JSON字符串转换为JSON对象
- var obj = JSON.parse(str);
- Alert(obj.name);
- Alert(obj.sex);
二、可以使用toJSONString()或者全局方法JSON.stringify()将JSON对象转化为JSON字符串。
例如:
- //将JSON对象转化为JSON字符
- var last=obj.toJSONString();
- //将JSON对象转化为JSON字符
- var last=JSON.stringify(obj);
- 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构建)
- pom.xml
- <dependency>
- <groupId>net.sf.json-lib</groupId>
- <artifactId>json-lib</artifactId>
- <version>2.4</version>
- <classifier>jdk15</classifier>
- </dependency>
代码示例:
注:在将 Json 形式的字符串转换为 JavaBean 的时候需要注意 JavaBean 中必须有无参构造函数,否则会报如下找不到初始化方法的错误
JavaBean代码:
- 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 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;
- }
- public void setAddress(String address) {
- this.address = address;
- }
- @Override
- public String toString() {
- return "Student [name=" + name + ", age=" + age + ", address="
- + address + "]";
- }
- }
提供两个工具类,json转换map的实现方法,有点儿简单,应付简单的需求没问题
- /***
- * 将json格式的字符串解析成Map对象
- * @param object
- * JSON字符串
- * @return Map集合
- */
- public static Map<String, String> toHashMap(Object object)
- {
- LinkedHashMap<String, String> dataMap = new LinkedHashMap<String, String>();
- // 将json字符串转换成jsonObject
- JSONObject jsonObject = JSONObject.fromObject(object);
- Iterator it = jsonObject.keys();
- // 遍历jsonObject数据,添加到Map对象
- while (it.hasNext())
- {
- String key = String.valueOf(it.next());
- String value = (String) jsonObject.get(key);
- dataMap.put(key, value);
- }
- return dataMap;
- }
- /**
- *
- * json转换map.
- * <br>详细说明
- * @param jsonStr json字符串
- * @return
- * @return Map<String,Object> 集合
- * @throws
- * @author slj
- */
- public static Map<String, Object> parseJSON2Map(String jsonStr){
- ListOrderedMap map = new ListOrderedMap();
- //最外层解析
- JSONObject json = JSONObject.fromObject(jsonStr);
- for(Object k : json.keySet()){
- Object v = json.get(k);
- //如果内层还是数组的话,继续解析
- if(v instanceof JSONArray){
- List<Map<String, Object>> list = new ArrayList<Map<String,Object>>();
- Iterator<JSONObject> it = ((JSONArray)v).iterator();
- while(it.hasNext()){
- JSONObject json2 = it.next();
- list.add(parseJSON2Map(json2.toString()));
- }
- map.put(k.toString(), list);
- } else {
- map.put(k.toString(), v);
- }
- }
- return map;
- }
测试代码:
- package com.ppl.jsonconvert;
- import java.util.ArrayList;
- import java.util.HashMap;
- import java.util.LinkedHashMap;
- import java.util.List;
- import java.util.Map;
- import com.ppl.json.commons.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("JSON");
- 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.fromObject(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\",\"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);
- //获得jsonArray的第一个元素
- Object o=jsonArray2.get(0);
- JSONObject jsonObject3=JSONObject.fromObject(o);
- Student stu3=(Student)JSONObject.toBean(jsonObject3, Student.class);
- System.out.println("stu3:"+stu3);
- ///******************************
- //Map转换成json, 大多使用jsonObject(注1)
- ///******************************
- //不建议使用出自于 org.apache.commons.collections.OrderedMap
- //Map<String, Integer> ordermap = (Map<String, Integer>)new ListOrderedMap();
- //有序的Map
- Map ordermap = new LinkedHashMap<String, String>();
- Map map = new HashMap<String,Object>();
- 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.arr[i]; }" );
- JSONObject jsonObjectMap = JSONObject.fromObject( map );
- System.out.println( "Map转换成json:"+jsonObjectMap );
- //注1示例详解
- Student stu4=new Student("JSON","28","上海");
- Map<String,Student> map4=new HashMap<String,Student>();
- map4.put("first", stu4);
- //1、JSONObject
- JSONObject mapObject=JSONObject.fromObject(map4);
- System.out.println("mapObject"+mapObject.toString());
- //2、JSONArray
- 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<Student> lists=new ArrayList<Student>();
- lists.add(stu5);
- lists.add(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<Student> list2=(List<Student>)JSONArray.toList(JSONArray.fromObject(arrayStr2), Student.class);
- for (Student stus : list2) {
- System.out.println(stus);
- }
- //最新的方法json字符串--》》list
- JSONArray jsonArrayT = JSONArray.fromObject(arrayStr2);
- List<Student> listData = (List) JSONArray.toCollection(jsonArrayT, Student.class);
- for (Student stus : listData) {
- System.out.println("listData: "+stus);
- }
- //转化为数组
- Student[] ss =(Student[])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<String, String> dataMap = JsonUtils.toHashMap(strObject);
- System.out.println(dataMap.toString());
- }
- }