Java解析JSON



JSON 即 JavaScript Object Natation,它是一种轻量级的数据交换格式,非常适合于服务器与 JavaScript 的交互。本文将快速讲解 JSON 格式,并通过代码示例演示如何分别在客户端和服务器端进行 JSON 格式数据的处理。


json-lib和org.json的使用
http://www.cnblogs.com/lanxuezaipiao/archive/2013/05/23/3096001.html


Json必需的包

commons-httpclient-3.1.jar
commons-lang-2.4.jar
commons-logging-1.1.1.jar
json-lib-2.2.3-jdk13.jar
ezmorph-1.0.6.jar
commons-collections-3.2.1.jar

以上包可以从

http://commons.apache.org/index.html

http://json-lib.sourceforge.net/

http://ezmorph.sourceforge.net/

http://morph.sourceforge.net/

http://www.docjar.com/

中下载到。

出现java.lang.NoClassDefFoundError: net/sf/ezmorph/Morpher错误是因为没有导入ezmorph.jar文件或版本不对。

出现java.lang.NoClassDefFoundError: org/apache/commons/collections/map/ListOrderedMap错误是因为没有导入commons-collections.jar文件或版本不对。

Java代码转换成json代码

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; }");

JSONObjectjson =JSONObject.fromObject(map);

3. Bean转换成json代码

JSONObjectjsonObject=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);



三、典型例子

java读取本地json文件


Json文件保存在本地硬盘:(如:F:\cctv.json)

格式如下:

<wbr><wbr><wbr><wbr>"A":[</wbr></wbr></wbr></wbr>

<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><span></span>{"name":"xx","sex":"0"}</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>],</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

<wbr><wbr><wbr><wbr>"B":[</wbr></wbr></wbr></wbr>

<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><span></span>{"address":"xx","phone":"xx"},</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>{"address":"xx","phone":"xx"},</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><span></span>{"address":"xx","phone":"xx"}</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><span></span>]<wbr>,</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

<wbr><wbr><wbr><wbr>"C":[</wbr></wbr></wbr></wbr>

<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><span></span>{"cd":"xx","ph":"xx"},</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>{"cd":"xx","ph":"xx"},</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><span></span>{"cd":"xx","ph":"xx"}</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><span></span>]<wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

要怎么读取Json文件中的数据?A类里面存的是一个Dto对象、B和C都是List集合

方法一:

//json文件存放路径(如:F:\cctv.json)
String<wbr>data=<wbr>ReadFile.readFile("F:\\cctv.json");<br> System.out.println(data);<br> JSONObject<wbr><wbr>jsonObj<wbr><wbr>=<wbr>JSONObject.fromObject(data);<br> //得到A对象<br> JSONArray<wbr>arrayA=jsonObj.getJSONArray("A");<br> A<wbr>a<wbr>=<wbr>(A)<wbr>JSONObject.toBean((JSONArray.fromObject(arrayA.toString()).getJSONObject(0)),A.class);<br> //得到B集合<br> JSONArray<wbr>arrayB=jsonObj.getJSONArray("B");<br> List&lt;B&gt;<wbr>listB=new<wbr>ArrayList&lt;B&gt;();<br> for(int<wbr>i=0;i&lt;arrayB.size();i++){<br> B<wbr>b=(B)JSONObject.toBean((JSONArray.fromObject(arrayB.toString()).getJSONObject(i)),B.class);<br> listB.add(b);<br> }<br> //得到C集合<br> JSONArray<wbr>arrayC=jsonObj.getJSONArray("C");<br> List&lt;C&gt;<wbr>listC=new<wbr>ArrayList&lt;C&gt;();<br> for(int<wbr>i=0;i&lt;arrayB.size();i++){<br> C<wbr>c=(C)JSONObject.toBean((JSONArray.fromObject(arrayC.toString()).getJSONObject(i)),C.class);<br> listB.add(c);<br> }</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

方法二:

1. 通过java IO 得到文件字符串 String jsonString = “。。。”;
2. JSONObject<wbr><span></span>jsonObj<wbr><span></span>= JSONObject.fromObject(jsonString);<br> 3. JSONObject AObj = jsonObj.getJSONObject("A");<br> 4.<wbr><span></span>A a = JSONObject.toBean(AObj, A.class); 得到A对象<br> 5.<wbr><span></span>List listB = Array.asList(json.getJSONArray("B").toArray()); 得到B的List集合<br> 6.<wbr><span></span>List listC = Array.asList(json.getJSONArray("C").toArray()); 得到C的List集合</wbr></wbr></wbr></wbr></wbr>


四、java处理JSON格式数据的工具类


imp<wbr>ort java.util.ArrayList;</wbr>

imp<wbr>ort java.util.Date;</wbr>

imp<wbr>ort java.util.HashMap;</wbr>

imp<wbr>ort java.util.Iterator;</wbr>

imp<wbr>ort java.util.List;</wbr>

imp<wbr>ort java.util.Map;</wbr>

<wbr></wbr>

imp<wbr>ort net.sf.json.JSONArray;</wbr>

imp<wbr>ort net.sf.json.JSONObject;</wbr>

imp<wbr>ort net.sf.json.JsonConfig;</wbr>

imp<wbr>ort net.sf.json.util.CycleDetectionStrategy;</wbr>

<wbr></wbr>

imp<wbr>ort com.linghui.common.util.DateUtil;</wbr>

imp<wbr>ort com.linghui.common.util.jsonutil.DateJsonValueProcessor;</wbr>

<wbr></wbr>

public class JsonUtil {

<wbr></wbr>

<wbr></wbr>

<wbr>public static Object getObject4JsonString(String jsonString,Class pojoCalss){</wbr>

<wbr>Object pojo;</wbr>

<wbr>JSONObject jsonObject = JSONObject.fromObject( jsonString );</wbr>

<wbr>pojo = JSONObject.toBean(jsonObject,pojoCalss);</wbr>

<wbr>return pojo;</wbr>

<wbr>}</wbr>

<wbr></wbr>

<wbr></wbr>

<wbr>public static Map getMap4Json(String jsonString){</wbr>

<wbr>JSONObject jsonObject = JSONObject.fromObject( jsonString );</wbr>

<wbr>Iterator keyIter = jsonObject.keys();</wbr>

<wbr>String key;</wbr>

<wbr>Object value;</wbr>

<wbr>Map valueMap = new HashMap();</wbr>

<wbr>while( keyIter.hasNext())</wbr>

<wbr>{</wbr>

<wbr>key = (String)keyIter.next();</wbr>

<wbr>value = jsonObject.get(key);</wbr>

<wbr>valueMap.put(key, value);</wbr>

<wbr>}</wbr>

<wbr>return valueMap;</wbr>

<wbr>}</wbr>

<wbr></wbr>

<wbr></wbr>

<wbr></wbr>

<wbr>public static Object[] getObjectArray4Json(String jsonString){</wbr>

<wbr>JSONArray jsonArray = JSONArray.fromObject(jsonString);</wbr>

<wbr>return jsonArray.toArray();</wbr>

<wbr>}</wbr>

<wbr></wbr>

<wbr></wbr>

<wbr></wbr>

<wbr>public static List getList4Json(String jsonString, Class pojoClass){</wbr>

<wbr>JSONArray jsonArray = JSONArray.fromObject(jsonString);</wbr>

<wbr>JSONObject jsonObject;</wbr>

<wbr>Object pojoValue;</wbr>

<wbr>List list = new ArrayList();</wbr>

<wbr>for ( int i = 0 ; i&lt;jsonArray.size(); i++){</wbr>

<wbr>jsonObject = jsonArray.getJSONObject(i);</wbr>

<wbr>pojoValue = JSONObject.toBean(jsonObject,pojoClass);</wbr>

<wbr>list.add(pojoValue);</wbr>

<wbr><span></span>}</wbr>

<wbr>return list;</wbr>

<wbr>}</wbr>

<wbr></wbr>

<wbr></wbr>

<wbr>public static String[] getStringArray4Json(String jsonString){</wbr>

<wbr>JSONArray jsonArray = JSONArray.fromObject(jsonString);</wbr>

<wbr>String[] stringArray = new String[jsonArray.size()];</wbr>

<wbr>for( int i = 0 ; i&lt;jsonArray.size() ; i++ ){</wbr>

<wbr>stringArray[i] = jsonArray.getString(i);</wbr>

<wbr>}</wbr>

<wbr>return stringArray;</wbr>

<wbr>}</wbr>

<wbr></wbr>

<wbr></wbr>

<wbr>public static Long[] getLongArray4Json(String jsonString){</wbr>

<wbr>JSONArray jsonArray = JSONArray.fromObject(jsonString);</wbr>

<wbr>Long[] longArray = new Long[jsonArray.size()];</wbr>

<wbr>for( int i = 0 ; i&lt;jsonArray.size() ; i++ ){</wbr>

<wbr>longArray[i] = jsonArray.getLong(i);</wbr>

<wbr><span></span>}</wbr>

<wbr>return longArray;</wbr>

<wbr>}</wbr>

<wbr></wbr>

<wbr></wbr>

<wbr>public static Integer[] getIntegerArray4Json(String jsonString){</wbr>

<wbr>JSONArray jsonArray = JSONArray.fromObject(jsonString);</wbr>

<wbr>Integer[] integerArray = new Integer[jsonArray.size()];</wbr>

<wbr>for( int i = 0 ; i&lt;jsonArray.size() ; i++ ){</wbr>

<wbr>integerArray[i] = jsonArray.getInt(i);</wbr>

<wbr><span></span>}</wbr>

<wbr>return integerArray;</wbr>

<wbr>}</wbr>

<wbr></wbr>

<wbr></wbr>

<wbr>public static Date[] getDateArray4Json(String jsonString,String DataFormat){</wbr>

<wbr>JSONArray jsonArray = JSONArray.fromObject(jsonString);</wbr>

<wbr>Date[] dateArray = new Date[jsonArray.size()];</wbr>

<wbr>String dateString;</wbr>

<wbr>Date date;</wbr>

<wbr></wbr>

<wbr>for( int i = 0 ; i&lt;jsonArray.size() ; i++ ){</wbr>

<wbr>dateString = jsonArray.getString(i);</wbr>

<wbr>date = DateUtil.stringToDate(dateString, DataFormat);</wbr>

<wbr>dateArray[i] = date;</wbr>

<wbr>}</wbr>

<wbr>return dateArray;</wbr>

<wbr>}</wbr>

<wbr></wbr>

<wbr></wbr>

<wbr>public static Double[] getDoubleArray4Json(String jsonString){</wbr>

<wbr>JSONArray jsonArray = JSONArray.fromObject(jsonString);</wbr>

<wbr>Double[] doubleArray = new Double[jsonArray.size()];</wbr>

<wbr>for( int i = 0 ; i&lt;jsonArray.size() ; i++ ){</wbr>

<wbr>doubleArray[i] = jsonArray.getDouble(i);</wbr>

<wbr>}</wbr>

<wbr>return doubleArray;</wbr>

<wbr>}</wbr>

<wbr></wbr>

<wbr></wbr>

<wbr>public static String getJsonString4JavaPOJO(Object javaObj){</wbr>

<wbr>JSONObject json;</wbr>

<wbr>json = JSONObject.fromObject(javaObj);</wbr>

<wbr>return json.toString();</wbr>

<wbr><span></span>}</wbr>

<wbr></wbr>

<wbr></wbr>

<wbr>public static String getJsonString4JavaPOJO(Object javaObj , String dataFormat){</wbr>

<wbr>JSONObject json;</wbr>

<wbr>JsonConfig jsonConfig = configJson(dataFormat);</wbr>

<wbr>json = JSONObject.fromObject(javaObj,jsonConfig);</wbr>

<wbr>return json.toString();</wbr>

<wbr><span></span>}</wbr>

<wbr></wbr>

<wbr></wbr>

<wbr>public static void main(String[] args) {</wbr>

<wbr>// TODO 自动生成方法存根</wbr>

<wbr>}</wbr>

<wbr></wbr>

<wbr></wbr>

<wbr>public static JsonConfig configJson(String datePattern) {</wbr>

<wbr>JsonConfig jsonConfig = new JsonConfig();</wbr>

<wbr>jsonConfig.setExcludes(new String[]{""});</wbr>

<wbr>jsonConfig.setIgnoreDefaultExcludes<wbr>(false);</wbr></wbr>

<wbr>jsonConfig.setCycleDetectionStrateg<wbr>y(CycleDetectionStrategy.LENIENT);</wbr></wbr>

<wbr>jsonConfig.registerJsonValueProcess<wbr>or(Date.class,</wbr></wbr>

<wbr>new DateJsonValueProcessor(datePattern));<wbr></wbr></wbr>

<wbr>return jsonConfig;</wbr>

<wbr>}</wbr>

<wbr></wbr>

<wbr></wbr>

<wbr>public static JsonConfig configJson(String[] excludes,</wbr>

<wbr>String datePattern) {</wbr>

<wbr>JsonConfig jsonConfig = new JsonConfig();</wbr>

<wbr>jsonConfig.setExcludes(excludes);</wbr>

<wbr>jsonConfig.setIgnoreDefaultExcludes<wbr>(false);</wbr></wbr>

<wbr>jsonConfig.setCycleDetectionStrateg<wbr>y(CycleDetectionStrategy.LENIENT);</wbr></wbr>

<wbr>jsonConfig.registerJsonValueProcess<wbr>or(Date.class,</wbr></wbr>

<wbr>new DateJsonValueProcessor(datePattern));<wbr></wbr></wbr>

<wbr>return jsonConfig;</wbr>

<wbr>}</wbr>

}

<wbr></wbr>

package com.linghui.common.util.jsonutil;

<wbr></wbr>

imp<wbr>ort java.text.DateFormat;</wbr>

imp<wbr>ort java.text.SimpleDateFormat;</wbr>

imp<wbr>ort java.util.Date;</wbr>

<wbr></wbr>

imp<wbr>ort net.sf.json.JsonConfig;</wbr>

imp<wbr>ort net.sf.json.processors.JsonValueProcessor;</wbr>

<wbr></wbr>

public class DateJsonValueProcessor implements JsonValueProcessor {

<wbr></wbr>

<wbr>public static final String DEFAULT_DATE_PATTERN = "yyyy-MM-dd";</wbr>

<wbr>private DateFormat dateFormat;</wbr>

<wbr></wbr>

<wbr></wbr>

<wbr>public DateJsonValueProcessor(String datePattern) {<wbr></wbr></wbr>

<wbr>if( null == datePattern )</wbr>

<wbr>dateFormat = new SimpleDateFormat(DEFAULT_DATE_PATTERN);</wbr>

<wbr>else</wbr>

<wbr>dateFormat = new SimpleDateFormat(datePattern);</wbr>

<wbr><span></span>}</wbr>

<wbr></wbr>

<wbr></wbr>

<wbr></wbr>

<wbr>public Object processArrayValue(Object arg0, JsonConfig arg1) {</wbr>

<wbr>// TODO 自动生成方法存根</wbr>

<wbr>return process(arg0);</wbr>

<wbr>}</wbr>

<wbr></wbr>

<wbr></wbr>

<wbr>public Object processObjectValue(String arg0, Object arg1, JsonConfig arg2) {</wbr>

<wbr>// TODO 自动生成方法存根</wbr>

<wbr>return process(arg1);</wbr>

<wbr>}</wbr>

<wbr>private Object process(Object value) {</wbr>

<wbr>return dateFormat.format((Date) value);</wbr>

<wbr>}<wbr></wbr></wbr>

}





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值