http://jilongliang.iteye.com/blog/1967068?utm_source=tuicool&utm_medium=referralhtml
http://www.cnblogs.com/lanxuezaipiao/archive/2013/05/23/3096001.htmljava
在www.json.org上公布了不少JAVA下的json构造和解析工具,其中org.json和json-lib比较简单,二者使用上差很少但仍是有些区别。下面首先介绍用json-lib构造和解析Json数据的方法示例。 用org.son构造和解析Json数据的方法详解请参见我下一篇博文:Java构造和解析Json数据的两种方法详解二 1、介绍 JSON-lib包是一个beans,collections,maps,java arrays 和XML和JSON互相转换的包,主要就是用来解析Json数据,在其官网http://www.json.org/上有详细讲解,有兴趣的能够去研究。 2、下载jar依赖包:能够去这里下载 3、基本方法介绍 1. List集合转换成json方法 List list = new ArrayList(); list.add( "first" ); list.add( "second" ); JSONArray jsonArray2 = JSONArray.fromObject( list ); 2. Map集合转换成json方法 复制代码 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.arr[i]; }"); JSONObject json = JSONObject.fromObject(map); 复制代码 3. Bean转换成json代码 JSONObject jsonObject = JSONObject.fromObject(new JsonBean()); 4. 数组转换成json代码 boolean[] boolArray = new boolean[] { true, false, true }; JSONArray jsonArray1 = JSONArray.fromObject(boolArray); 5. 通常数据转换成json代码 JSONArray jsonArray3 = JSONArray.fromObject("['json','is','easy']" ); 6. beans转换成json代码 复制代码 List list = new ArrayList(); JsonBean2 jb1 = new JsonBean2(); jb1.setCol(1); jb1.setRow(1); jb1.setValue("xx"); JsonBean2 jb2 = new JsonBean2(); jb2.setCol(2); jb2.setRow(2); jb2.setValue(""); list.add(jb1); list.add(jb2); JSONArray ja = JSONArray.fromObject(list); 复制代码 4、演示示例 这里以基本的几个经常使用方法进行测试 复制代码 package com.json; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import net.sf.json.JSONArray; import net.sf.json.JSONObject; /** * 使用json-lib构造和解析Json数据 * * @author Alexia * @date 2013/5/23 * */ public class JsonTest { /** * 构造Json数据 * * @return */ public static String BuildJson() { // JSON格式数据解析对象 JSONObject jo = new JSONObject(); // 下面构造两个map、一个list和一个Employee对象 Map<String, String> map1 = new HashMap<String, String>(); map1.put("name", "Alexia"); map1.put("sex", "female"); map1.put("age", "23"); Map<String, String> map2 = new HashMap<String, String>(); map2.put("name", "Edward"); map2.put("sex", "male"); map2.put("age", "24"); List<Map> list = new ArrayList<Map>(); list.add(map1); list.add(map2); Employee employee = new Employee(); employee.setName("wjl"); employee.setSex("female"); employee.setAge(24); // 将Map转换为JSONArray数据 JSONArray ja1 = JSONArray.fromObject(map1); // 将List转换为JSONArray数据 JSONArray ja2 = JSONArray.fromObject(list); // 将Bean转换为JSONArray数据 JSONArray ja3 = JSONArray.fromObject(employee); System.out.println("JSONArray对象数据格式:"); System.out.println(ja1.toString()); System.out.println(ja2.toString()); System.out.println(ja3.toString()); // 构造Json数据,包括一个map和一个Employee对象 jo.put("map", ja1); jo.put("employee", ja2); System.out.println("\n最终构造的JSON数据格式:"); System.out.println(jo.toString()); return jo.toString(); } /** * 解析Json数据 * * @param jsonString Json数据字符串 */ public static void ParseJson(String jsonString) { // 以employee为例解析,map相似 JSONObject jb = JSONObject.fromObject(jsonString); JSONArray ja = jb.getJSONArray("employee"); List<Employee> empList = new ArrayList<Employee>(); // 循环添加Employee对象(可能有多个) for (int i = 0; i < ja.size(); i++) { Employee employee = new Employee(); employee.setName(ja.getJSONObject(i).getString("name")); employee.setSex(ja.getJSONObject(i).getString("sex")); employee.setAge(ja.getJSONObject(i).getInt("age")); empList.add(employee); } System.out.println("\n将Json数据转换为Employee对象:"); for (int i = 0; i < empList.size(); i++) { Employee emp = empList.get(i); System.out.println("name: " + emp.getName() + " sex: " + emp.getSex() + " age: " + emp.getAge()); } } /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub ParseJson(BuildJson()); } } 复制代码 运行结果以下 5、与org.json比较 json-lib和org.json的使用几乎是相同的,我总结出的区别有两点: 1. org.json比json-lib要轻量得多,前者没有依赖任何其余jar包,然后者要依赖ezmorph和commons的lang、logging、beanutils、collections等组件 2. json-lib在构造bean和解析bean时比org.json要方便的多,json-lib可直接与bean互相转换,而org.json不能直接与bean相互转换而须要map做为中转,若将bean转为json数据,首先须要先将bean转换为map再将map转为json,比较麻烦。 总之,仍是那句话—适合本身的才是最好的,你们要按需选取使用哪一种方法进行解析。最后给你们介绍两款解析Json数据的工具:一是在线工具JSON Edit(http://braincast.nl/samples/jsoneditor/);另外一个是Eclipse的插件JSON Tree Analyzer,都很好用,推荐给你们使用! Xml代码 收藏代码 <?xml version="1.0" encoding="UTF-8"?> <result> <status>1</status> <!-- 带中括号的Json数据 --> <info> [{"Student":{"userName":"张三","age":"25","address":"中国大陆","Email":"zhangsan@sina.com"}},{"Student":{"userName":"李四","age":"26","address":"中国台湾","Email":"lisi@sina.com"}}] </info> </result> Java代码 收藏代码 package com.org.entity; import java.io.Serializable; /** *@Author:liangjilong *@Date:2013-10-30 *@Version:1.0 *@Email:liangjilong51job@qq.com *@Description: */ public class Student implements Serializable{ private String userName; private String age; private String address; private String Email; public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } 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; } public String getEmail() { return Email; } public void setEmail(String email) { Email = email; } } Java代码 收藏代码 package com.org.domain; import java.io.BufferedWriter; import java.io.File; import java.io.FileOutputStream; import java.io.OutputStreamWriter; import java.io.Writer; import net.sf.json.JSONArray; import net.sf.json.JSONObject; import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import com.google.gson.JsonArray; import com.google.gson.JsonObject; import com.google.gson.JsonPrimitive; import com.org.entity.Student; /** * @Author:liangjilong * @Date:2013-10-30 * @Version:1.0 * @Email:liangjilong51job@qq.com * @Description:解析XML里面带中括号的JSON数组的数据 * http://bbs.csdn.net/topics/380187164 */ @SuppressWarnings("all") public class DoMain { public static void main(String[] args) throws Exception { testJson(); String fileName="src/stu.xml"; File file=new File(fileName); Document doc=Jsoup.parse(file,"utf-8"); if(doc!=null){ //使用Jsoup去解析xml的info节点的Json数据 String info=doc.select("info").text().toString(); int start = info.indexOf("["); String newJson = info.substring(start, info.lastIndexOf("]")+1);//组装成新的Json数据 //json-lib-2.2.3-jdk15.jar JSONArray jsonArr=JSONArray.fromObject(newJson); JSONObject objRoot=null; /** * 遍历Json数据 */ for(int i=0,l=jsonArr.size();i<l;i++){ objRoot=jsonArr.getJSONObject(i); Object obj=objRoot.get("Student");//Student节点 JSONObject jsonObj=JSONObject.fromObject(obj); /** * 方法1、根据key获取value值 */ System.out.println(jsonObj.get("userName")+"\t"+jsonObj.get("age")+"\t"+jsonObj.get("address")+jsonObj.get("Email")); System.out.println("=================================================================="); /** * 方法2、根据对象化获取值 */ Student stu=(Student)jsonObj.toBean(jsonObj,Student.class); System.out.println(stu.getUserName()+"\t"+stu.getAge()+"\t"+stu.getAddress()+"\t"+stu.getEmail()); } } } /** * 文件处理 * @param content * @param filePath * @return */ public static boolean write(String content, String filePath) { boolean flag = true; try { Writer out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(filePath), "utf-8")); out.write("\n" + content); out.close(); } catch (Exception ex) { ex.printStackTrace(); return false; } return flag; } /** * JsonObject,JsonPrimitive,JsonObject的使用 * */ private static void testJson() { JsonObject jsonObj = new JsonObject(); JsonArray jsonArr = new JsonArray(); JsonObject json_Obj = new JsonObject(); json_Obj.add("key1", new JsonPrimitive("value")); json_Obj.add("key2", new JsonPrimitive(1)); json_Obj.add("key3", new JsonPrimitive(false)); jsonArr.add(json_Obj); jsonObj.add("arr", jsonArr); //获取带有中括号数组的Json数据 System.out.println("str:\t"+jsonObj.toString()); System.out.println("key=\t"+jsonObj.get("arr")); } }