Simple JSON是Google开发的Java JSON解析框架,基于Apache协议。
下载的文件是:json_simple.jar
例子1:很方便的方式,使用JSONValue
System.out.println("=======decode======="); String s="[0,{/"1/":{/"2/":{/"3/":{/"4/":[5,{/"6/":7}]}}}}]"; Object obj=JSONValue.parse(s); JSONArray array=(JSONArray)obj; System.out.println("======the 2nd element of array======"); System.out.println(array.get(1)); System.out.println(); JSONObject obj2=(JSONObject)array.get(1); System.out.println("======field /"1/"=========="); System.out.println(obj2.get("1")); s="{}"; obj=JSONValue.parse(s); System.out.println(obj); s="[5,]"; obj=JSONValue.parse(s); System.out.println(obj); s="[5,,2]"; obj=JSONValue.parse(s); System.out.println(obj); JSONObject是继承Map的,而JSONArray是继承List的,所以你可以用Map和List的标准方式来使用JSONObject和JSONArray。
而JSONValue则可以使用数组也可以用对象。
例子2:快速的方式,使用JSONParser
JSONParser parser=new JSONParser(); System.out.println("=======decode======="); String s="[0,{/"1/":{/"2/":{/"3/":{/"4/":[5,{/"6/":7}]}}}}]"; Object obj=parser.parse(s); JSONArray array=(JSONArray)obj; System.out.println("======the 2nd element of array======"); System.out.println(array.get(1)); System.out.println(); JSONObject obj2=(JSONObject)array.get(1); System.out.println("======field /"1/"=========="); System.out.println(obj2.get("1")); s="{}"; obj=parser.parse(s); System.out.println(obj); s="[5,]"; obj=parser.parse(s); System.out.println(obj); s="[5,,2]"; obj=parser.parse(s); System.out.println(obj); 使用JSONParser需要捕获异常。
例子3:异常处理
String jsonText = "[[null, 123.45, /"a//tb c/"]}, true"; JSONParser parser = new JSONParser(); try{ parser.parse(jsonText); } catch(ParseException pe){ System.out.println("position: " + pe.getPosition()); System.out.println(pe); } 执行结果:
position:25 Unexpected token RIGHT BRACE(}) at position 25.
例子4:容器工厂
使用使用ContainerFactory类来创建一个容器工厂。
String jsonText = "{/"first/": 123, /"second/": [4, 5, 6], /"third/": 789}"; JSONParser parser = new JSONParser(); ContainerFactory containerFactory = new ContainerFactory(){ public List creatArrayContainer() { return new LinkedList(); } public Map createObjectContainer() { return new LinkedHashMap(); } }; try{ Map json = (Map)parser.parse(jsonText, containerFactory); Iterator iter = json.entrySet().iterator(); System.out.println("==iterate result=="); while(iter.hasNext()){ Map.Entry entry = (Map.Entry)iter.next(); System.out.println(entry.getKey() + "=>" + entry.getValue()); } System.out.println("==toJSONString()=="); System.out.println(JSONValue.toJSONString(json)); } catch(ParseException pe){ System.out.println(pe); } 结果如下:
==iterate result== first=>123 second=>[4,5,6] third=>789 ==toJSONString()== {"first":123,"second":[4,5,6],"third":789} 如果你不使用容器工厂,Simple-JSON默认使用JSONObject和JSONArray。
例子5:可停的SAX式内容处理
SimpleJSON推荐一种简单的可停的SAX方式的内容处理方式来处理文本流,用户可以停留在逻辑输入流的任意点,接着去处理其他逻辑,然后再继续先前的处理。不用等待整个流处理完毕。以下是一个例子。
KeyFinder.java: