Json数据格式解析示例 (语言:Java 包:org.json.jar)

来源:互联网 发布:java如何调用api接口 编辑:程序博客网 时间:2024/05/01 00:04

以做过的项目为例,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 

原创粉丝点击