Java JSON解析的两种常用方式
来源:互联网 发布:ubuntu查看光纤卡wwn? 编辑:程序博客网 时间:2024/05/21 07:32
Java常用的解析JSON的方式有两种,一种是JSON-lib,一种是org.json。
JSON-lib:
依赖包:
commons-beanutils.jar
commons-collections.jar
commons-lang.jar
commons-logging.jar
ezmorph.jar
json-lib.jar
基本方法介绍:
List、数组转换为json
JSONArray.fromObject(list) or JSONArray.fromObject(arr)
Map、bean转换为json
JSONObject.fromObject(map) or JSONObject.fromObject(beanname)
普通字符串转换为json
JSONObject.fromObject("{'name':'zs'}") or JSONArray.fromObject("['zs','ls','ww']")
示例:
package net.hkh.json;import java.util.HashMap;import java.util.ArrayList;import java.util.List;import java.util.Map;import net.sf.json.JSONArray;import net.sf.json.JSONObject;/* * JSONTest类 */public class JSONTest{ /* * 解析JSON数据 */ public static void parseJSON(String jsonString){ JSONObject jb=JSONObject.fromObject(jsonString); JSONObject ja=jb.getJSONArray("employee"); List<Employee>empList=new ArrayList<Employee>(); for(int i=0;i<ja.size();i++){ Employee emp=new Employee(); emp.setName(ja.getJSONObject(i).getString("name")); emp.setSex(ja.getJSONObject(i).getString("sex")); emp.setAge(ja.getJSONObject(i).getInt("age")); empList.add(emp); } 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()); } } /* * 构造JSON数据 */ public static String buildJSON(){ JSONObject jo=new JSONObject(); Map<String,String>map1=new HashMap<String,String>(); map1.put("name","zs"); map1.put("sex","female"); map1.put("age","23"); Map<String,String>map2=new HashMap<String,String>(); map2.put("name","ls"); map2.put("sex","male"); map2.put("age","24"); List<Map<String,String>>list=new ArrayList<Map<String,String>>(); list.add(map1); list.add(map2); Employee emp=new Employee(); emp.setName("ww"); emp.setSex("male"); emp.setAge(25); JSONArray ja1=JSONArray.fromObject(map1); JSONArray ja2=JSONArray.fromObject(list); JSONArray ja3=JSONArray.fromObject(employee); System.out.println("JSONArray对象数据格式:"); System.out.println(ja1.toString()); System.out.println(ja2.toString()); System.out.println(ja3.toString()); jo.put("map",ja1); jo.put("employee",ja2); System.out.println("\n最终构造的JSON数据格式:"); System.out.println(jo.toString()); return jo.toString(); } /* * main方法 */ public static void main(String[]args){ parseJSON(buildJSON()); }}/* * Employee类 */class Employee { private String name ; private String sex ; private int age ; public Employee() { } public Employee(String name, String sex, int age) { this.name = name; this.sex = sex; this.age = age; } public String getName() { return name ; } public void setName(String name) { this.name = name; } public String getSex() { return sex ; } public void setSex(String sex) { this.sex = sex; } public int getAge() { return age ; } public void setAge(int age) { this.age = age; } public String toString() { return name + "," + sex + "," + age; }}
========================================================================
org.json
依赖包:
json.org.jar
基本方法介绍:
org.json不能直接与bean进行转换,需要通过map进行中转
1.将bean转换为Map:
public static Map toMap(Object bean) {Map rslt = new HashMap();Method[] methods = bean.getClass().getDeclaredMethods();for (Method method : methods) {try {if (method.getName().startsWith("get")) {String field = method.getName();field = field.substring(field.indexOf("get") + 3);field = field.toLowerCase().charAt(0) + field.substring(1);Object value = method.invoke(bean, (Object[]) null);rslt.put(field, null == value ? "" : value.toString());}} catch (Exception e) {e.printStackTrace();}}return rslt;}
2.将json转换为Map
public static Map toMap(String jsonString) throws JSONException {JSONObject obj = new JSONObject(jsonString);Map rslt = new HashMap();Iterator iter = obj.keys();String key = null;String value = null;while (iter.hasNext()) {key = (String) iter.next();value = obj.getString(key);rslt.put(key, value);}return rslt;}
3.将Map转换为JavaBean
public static Object toJavaBean(Object bean, Map data) {Method[] methods = bean.getClass().getDeclaredMethods();for (Method method : methods) {try {if (method.getName().startsWith("set")) {String field = method.getName();field = field.substring(field.indexOf("set") + 3);field = field.toLowerCase().charAt(0) + field.substring(1);method.invoke(bean, new Object[] { data.get(field) });}} catch (Exception e) {e.printStackTrace();}}return bean;}
4.将JSON转换为JavaBean
public static Object toJavaBean(Object bean, String jsonString)throws JSONException {return toJavaBean(bean, toMap(jsonString));}
==========================================
json-lib与org.json比较:
1.org.json比json-lib要轻量得多,前者没有依赖其他任何jar包,而后者要依赖ezmorph和commons的lang、loggin、beanutils、collections等组件
2.json-lib在构造bean和解析bean时比org.json要方便得多,json-lib可与JavaBean直接互转,而org.json不能与JavaBean进行直接转换需要通过Map进行中转,即先将JavaBean转换为Map,然后再将Map转换为JavaBean
0 0
- Java JSON解析的两种常用方式
- java解析Json的两种方式
- Java解析Json数据的两种方式
- JSON的两种解析方式
- 解析json串的两种方式
- Json解析两种方式
- 常用的json解析方式
- Android中解析JSON的两种方式
- 解析JSON数据后的两种显示方式
- android解析Json常见的两种方式!
- 【代码笔记】iOS-json文件的两种解析方式
- Json详解和常用的解析方式
- Java构造和解析Json数据的两种方法
- Java构造解析Json数据的两种方法
- Java构造和解析Json数据的两种方法
- Json解析1--Java构造和解析Json数据的两种方法详解
- Java解析XML文件的两种方式详解
- Java解析XML文件的两种方式详解
- MDX语句之:ParallelPeriod
- Huffman
- base64编码
- kill和kill -9
- 动态设置Activity背景图
- Java JSON解析的两种常用方式
- Andorid 网络流量统计
- mail.log的一个文档中读取并过滤出mail地址
- c++ 服务器程序bug dump
- 管理者不要“好为人师”
- python初学过程的一些小练习题
- Java随记
- 二叉树遍历
- 安卓 GPS设置