国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Java > 正文

Simple JSON開發指南

2019-11-26 14:23:49
字體:
來源:轉載
供稿:網友

Simple JSON是Google開發的Java JSON解析框架,基于Apache協議。

json-simple的主頁://m.survivalescaperooms.com/softs/455885.html

下載的文件是: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不是線程安全的。 

json_encode ― 對變量進行 JSON 編碼。

說明:string json_encode ($value ),返回 value 值的 JSON 形式。

參數:待編碼的 value ,除了resource 類型之外,可以為任何數據類型

該函數只能接受 UTF-8 編碼的數據(譯注:指字符/字符串類型的數據)

返回值:編碼成功則返回一個以 JSON 形式表示的 string 。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 洛南县| 青河县| 崇阳县| 广宁县| 广东省| 馆陶县| 广安市| 灯塔市| 哈巴河县| 得荣县| 右玉县| 潞城市| 仪征市| 磐安县| 宜丰县| 肥东县| 凤冈县| 栖霞市| 安陆市| 盘山县| 星子县| 卢龙县| 开平市| 江源县| 肥城市| 安塞县| 神池县| 应用必备| 莒南县| 西贡区| 会理县| 三门峡市| 眉山市| 巧家县| 庆安县| 保定市| 天柱县| 醴陵市| 花莲市| 洛浦县| 桦川县|