以做过的项目为例,Java解析Json格式数据,使用开源包json.jar。业务背景: 在数据库某个表中,存有Json数据格式的数据,现在要把数据解析到java中。
package com.test.json;
import org.apache.log4j.Logger;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
/**
*
* 解析JSON数据格式
*
* @category:测试
* @author hanhuayi
* @version v3.0,Jun 17, 2012 2:31:27 PM
* @see
*/
public class TestJSON{
/**
* log4j
*/
private static Logger logger = Logger.getLogger(TestJSON.class);
//表格名
private static String gridName = "list";
//测试Json格式数据
String str = "{'list':[{'_show_edit':false,'sum':0,'_height':30,'_need_edit':true,'width':200,'delete':false,'displayname':'供应商编码','need':0,'alias':null,'code':'ccode','lock':0,'_prec_edit':false,'prec':null,'align':'left','_sum_edit':false,'_id':'autoID-7','cdatatype':'0','show':1,'name':'供应商编码','parent':null,'_displayname_edit':true,'flex':false},{'_show_edit':false,'sum':0,'_height':30,'_need_edit':true,'width':null,'delete':false,'displayname':'供应商名称','need':0,'alias':null,'code':'cname','lock':0,'_prec_edit':false,'prec':null,'align':'left','_sum_edit':false,'_id':'autoID-8','cdatatype':'0','show':1,'name':'供应商名称','parent':null,'_displayname_edit':true,'flex':false},{'_show_edit':true,'sum':0,'_height':30,'_need_edit':true,'width':null,'delete':false,'displayname':'供应商简称','need':0,'alias':null,'code':'csname','lock':0,'_prec_edit':false,'prec':null,'align':'left','_sum_edit':false,'_id':'autoID-9','cdatatype':'0','show':1,'name':'供应商简称','parent':null,'_displayname_edit':true,'flex':false},{'_show_edit':true,'sum':0,'_height':30,'_need_edit':true,'width':null,'delete':false,'displayname':'助记码','need':0,'alias':null,'code':'chotcode','lock':0,'_prec_edit':false,'prec':null,'align':'left','_sum_edit':false,'_id':'autoID-10','cdatatype':'0','show':1,'name':'助记码','parent':null,'_displayname_edit':true,'flex':false}]}";
public static void main(String[] args) {
//列属性
String[] colArributes = new String[]{"displayname","show","code",""};
//解析JSON数据格式,获得列属性集合
List<Map> colData= parseJSONStyle(gridName,str,colArributes);
}
/**
*
* 解析Json格式数据
*
* @param gridName
* @param str
* @param colArributes
* @return
* @return List<Map>
* @exception 异常描述
* @see
*/
@SuppressWarnings("unchecked")
private static List<Map> parseJSONStyle(String gridName,String str,String[] colArributes){
List<Map> colData = new ArrayList<Map>();
try {
JSONObject jso= new JSONObject(str);
if(jso.has(gridName)) {
JSONArray colArrayJson = jso.getJSONArray(gridName);
// logger.info(colArrayJson);
for (int i = 0; i < colArrayJson.length(); i ++) {
JSONObject colJso = colArrayJson.getJSONObject(i);
for (int j = 0; j < colArributes.length; j ++) {
Map colMap = new HashMap();
colMap.put(colArributes[j], colJso.get(colArributes[j]));
colData.add(colMap);
// logger.info(colJso.get("name"));
}
}
}
} catch (JSONException e) {
e.printStackTrace();
}
return colData;
}
}
下面是一个更简单的例子(网上摘取),运行一遍就知道大致上的解析规则:
String a="{"data":{"bidirection":true},"msg":"成功","success":true,"code":0,"array":[{"a":true},{"a":false}]}";
JSONObject jso=new JSONObject(a);
System.out.println(jso.get("data").toString());
JSONObject jso2=jso.getJSONObject("data");
System.out.println(jso.get("success"));
System.out.println(jso2.getBoolean("bidirection"));
JSONArray jso3=jso.getJSONArray("array");
System.out.println(jso3.get(0));
简单的说明一下:
在上面的Json格式数据字符串a中,
a :是一个Json对象
"data":{"bidirection":true} :是一个Json对象
"bidirection":true :是键值对
"array":[{"a":true},{"a":false}] :是Json对象里的一个Json数组,这个数组里的元素是Json对象
JSON的数据格式,可以参照:http://baike.baidu.com/view/136475.htm