Simple JSON是Google开发的Java JSON解析框架,基于Apache协议。
json-simple的主页:http://code.google.com/p/json-simple/
下载的文件是: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:
class KeyFinder implements ContentHandler{
private Object value;
private boolean found = false;
private boolean end = false;
private String key;
private String matchKey;
public void setMatchKey(String matchKey){
this.matchKey = matchKey;
}
public Object getValue(){
return value;
}
public boolean isEnd(){
return end;
}
public void setFound(boolean found){
this.found = found;
}
public boolean isFound(){
return found;
}
public void startJSON() throws ParseException, IOException {
found = false;
end = false;
}
public void endJSON() throws ParseException, IOException {
end = true;
}
public boolean primitive(Object value) throws ParseException, IOException {
if(key != null){
if(key.equals(matchKey)){
found = true;
this.value = value;
key = null;
return false;
}
}
return true;
}
public boolean startArray() throws ParseException, IOException {
return true;
}
public boolean startObject() throws ParseException, IOException {
return true;
}
public boolean startObjectEntry(String key) throws ParseException, IOException {
this.key = key;
return true;
}
public boolean endArray() throws ParseException, IOException {
return false;
}
public boolean endObject() throws ParseException, IOException {
return true;
}
public boolean endObjectEntry() throws ParseException, IOException {
return true;
}
}
Main logic:
String jsonText ="{\"first\": 123, \"second\": [{\"k1\":{\"id\":\"id1\"}}, 4, 5, 6, {\"id\": 123}], \"third\": 789, \"id\": null}";
JSONParser parser =newJSONParser();
KeyFinder finder =newKeyFinder();
finder.setMatchKey("id");
try{
while(!finder.isEnd()){
parser.parse(jsonText, finder,true);
if(finder.isFound()){
finder.setFound(false);
System.out.println("found id:");
System.out.println(finder.getValue());
}
}
}
catch(ParseException pe){
pe.printStackTrace();
}
执行结果:
found id:
id1
found id:
123
found id:
null
例子6:整个对象图,用SAX式的解析
class Transformer implements ContentHandler{
private Stack valueStack;
public Object getResult(){
if(valueStack == null || valueStack.size() == 0)
return null;
return valueStack.peek();
}
public boolean endArray () throws ParseException, IOException {
trackBack();
return true;
}
public void endJSON () throws ParseException, IOException {}
public boolean endObject () throws ParseException, IOException {
trackBack();
return true;
}
public boolean endObjectEntry () throws ParseException, IOException {
Object value = valueStack.pop();
Object key = valueStack.pop();
Map parent = (Map)valueStack.peek();
parent.put(key, value);
return true;
}
private void trackBack(){
if(valueStack.size() > 1){
Object value = valueStack.pop();
Object prev = valueStack.peek();
if(prev instanceof String){
valueStack.push(value);
}
}
}
private void consumeValue(Object value){
if(valueStack.size() == 0)
valueStack.push(value);
else{
Object prev = valueStack.peek();
if(prev instanceof List){
List array = (List)prev;
array.add(value);
}
else{
valueStack.push(value);
}
}
}
public boolean primitive (Object value) throws ParseException, IOException {
consumeValue(value);
return true;
}
public boolean startArray () throws ParseException, IOException {
List array = new JSONArray();
consumeValue(array);
valueStack.push(array);
return true;
}
public void startJSON () throws ParseException, IOException {
valueStack = new Stack();
}
public boolean startObject () throws ParseException, IOException {
Map object = new JSONObject();
consumeValue(object);
valueStack.push(object);
return true;
}
public boolean startObjectEntry (String key) throws ParseException, IOException {
valueStack.push(key);
return true;
}
}
Main方式逻辑:
String jsonString = <Input JSON text>;
Object value = null;
JSONParser parser = new JSONParser();
Transformer transformer = new Transformer();
parser.parse(jsonString, transformer);
value = transformer.getResult();
执行结果:
String jsonString =<Input JSON text>;
Object value =null;
JSONParser parser =newJSONParser();
value = parser.parse(jsonString);
注意:
JSONPauser不是线程安全的。
分享到:
相关推荐
亚马逊云计算中的SimpleDB开发指南。
Simple JSON是Google开发的JSON解析工具,可以对JSON进行SAX式快速解析,压缩包里包含了 1. jar包 2. 官方文档
赠送jar包:json-simple-3.0.2.jar; 赠送原API文档:json-simple-3.0.2-javadoc.jar; 赠送源代码:json-simple-3.0.2-sources.jar; 赠送Maven依赖信息文件:json-simple-3.0.2.pom; 包含翻译后的API文档:json-...
java中使用JSON封装需要的json_simple jar包
A simple JSON parser in C#
Simple JSON Object mapping written in Swift.zip,用swift编写的简单json对象映射
Laravel开发-laravel-simple-jsonapi 对Laravel的JSON API支持
json-simple-1.1.jar json-simple-1.1-sources.jar (json-simple-1.1.jar)&(json-simple-1.1-sources.jar).jar (json-simple-1.1.jar)&(json-simple-1.1-sources.jar).jar
赠送jar包:json-simple-3.0.2.jar; 赠送原API文档:json-simple-3.0.2-javadoc.jar; 赠送源代码:json-simple-3.0.2-sources.jar; 赠送Maven依赖信息文件:json-simple-3.0.2.pom; 包含翻译后的API文档:json-...
Json开发用到的jar包其中包括,commons-beanutils-1.9.2.jar、commons-collections-3.2.1.jar、commons-lang-2.4.jar、commons-logging-1.2.jar、ezmorph-1.0.6.jar、json-lib-2.4-jdk15.jar、jackson-all-1.9.11....
大家好!这可是找了很多天才找到的,是支持ajax开发的
Simple C++ JSON library
json-simple-1.1.jar.zip
是google的json-simple.1.1.1.jar,功能很强大,很好用。
json_simple-1.1-all.zip 方便java对json格式数据的处理
CAM 标签的本地下周
json_simple-1.1.1.jar jar包 方便我们解析字符串,数组
* JsonRpc-Cpp provides also simple JSON-RPC TCP and UDP server implementations (Json::Rpc::TcpServer and Json::Rpc::UdpServer) as well * as simple JSON-RPC TCP and UDP client implementations (Json::...
扩展jquery simple tree 用json 格式传递数据到后台,如struts2,可用json插件转换对象