Simple JSON是Google开发的Java JSON解析框架,基于Apache协议。
json-simple的主页:http://www.phpstudy.net/softs/455885.html
下载的文件是:json_simple.jar
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}
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;
}
}
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
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;
}
}
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);
json_encode — 对变量进行 JSON 编码。
说明:string json_encode ($value ),返回 value 值的 JSON 形式。
参数:待编码的 value ,除了resource 类型之外,可以为任何数据类型
该函数只能接受 UTF-8 编码的数据(译注:指字符/字符串类型的数据)
返回值:编码成功则返回一个以 JSON 形式表示的 string 。
本文地址:https://www.stayed.cn/item/21368
转载请注明出处。
本站部分内容来源于网络,如侵犯到您的权益,请 联系我