欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Simple JSON開(kāi)發(fā)指南

 更新時(shí)間:2016年04月29日 11:50:07   作者:蝦米  
注意:JSONPauser不是線程安全的,需要的朋友可以參考下

Simple JSON是Google開(kāi)發(fā)的Java JSON解析框架,基于Apache協(xié)議。

json-simple的主頁(yè):http://www.dbjr.com.cn/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的標(biāo)準(zhǔn)方式來(lái)使用JSONObject和JSONArray。

而JSONValue則可以使用數(shù)組也可以用對(duì)象。

例子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); 
  } 

執(zhí)行結(jié)果:

position:25 Unexpected token RIGHT BRACE(}) at position 25.

 

例子4:容器工廠

使用使用ContainerFactory類來(lái)創(chuàng)建一個(gè)容器工廠。

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

 結(jié)果如下:

==iterate result== first=>123 second=>[4,5,6] third=>789 ==toJSONString()==
 {"first":123,"second":[4,5,6],"third":789}
 如果你不使用容器工廠,Simple-JSON默認(rèn)使用JSONObject和JSONArray。
 例子5:可停的SAX式內(nèi)容處理
SimpleJSON推薦一種簡(jiǎn)單的可停的SAX方式的內(nèi)容處理方式來(lái)處理文本流,用戶可以停留在邏輯輸入流的任意點(diǎn),接著去處理其他邏輯,然后再繼續(xù)先前的處理。不用等待整個(gè)流處理完畢。以下是一個(gè)例子。
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();
 }
執(zhí)行結(jié)果:
found id:
 id1
 found id:
 123
 found id:
 null
例子6:整個(gè)對(duì)象圖,用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(); 
 執(zhí)行結(jié)果:
String jsonString =<Input JSON text>;
 Object value =null;
 JSONParser parser =newJSONParser();
 value = parser.parse(jsonString);
注意:
JSONPauser不是線程安全的。 

json_encode — 對(duì)變量進(jìn)行 JSON 編碼。

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

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

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

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

相關(guān)文章

  • Java線程池必知必會(huì)知識(shí)點(diǎn)總結(jié)

    Java線程池必知必會(huì)知識(shí)點(diǎn)總結(jié)

    這篇文章主要給大家介紹了關(guān)于Java線程池必知必會(huì)知識(shí)點(diǎn)的相關(guān)資料,文中通過(guò)圖文以及實(shí)例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2022-02-02
  • Integer IntegerCache源碼閱讀

    Integer IntegerCache源碼閱讀

    這篇文章主要介紹了Integer IntegerCache源碼閱讀,具有一定借鑒價(jià)值,需要的朋友可以參考下
    2018-01-01
  • javax.persistence中@Column定義字段類型方式

    javax.persistence中@Column定義字段類型方式

    這篇文章主要介紹了javax.persistence中@Column定義字段類型方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • java使用Cookie判斷用戶登錄情況的方法

    java使用Cookie判斷用戶登錄情況的方法

    這篇文章主要為大家詳細(xì)介紹了java使用Cookie判斷用戶登錄情況,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-12-12
  • java、python、JavaScript以及jquery循環(huán)語(yǔ)句的區(qū)別

    java、python、JavaScript以及jquery循環(huán)語(yǔ)句的區(qū)別

    本篇文章主要介紹java、python、JavaScript以及jquery的循環(huán)語(yǔ)句的區(qū)別,這里整理了它們循環(huán)語(yǔ)句語(yǔ)法跟示例,以便大家閱讀,更好的區(qū)分它們的不同
    2016-07-07
  • java 集合并發(fā)操作出現(xiàn)的異常ConcurrentModificationException

    java 集合并發(fā)操作出現(xiàn)的異常ConcurrentModificationException

    Map在遍歷時(shí)候通常 現(xiàn)獲得其鍵值的集合Set,然后用迭代器Iterator來(lái)對(duì)Map進(jìn)行遍歷。
    2009-06-06
  • RocketMQ的消費(fèi)者類型與最佳實(shí)踐詳解

    RocketMQ的消費(fèi)者類型與最佳實(shí)踐詳解

    這篇文章主要介紹了RocketMQ的消費(fèi)者類型與最佳實(shí)踐詳解,在?RocketMQ?5.0?中,更加強(qiáng)調(diào)了客戶端類型的概念,尤其是消費(fèi)者類型,為了滿足多樣的?RocketMQ?中一共有三種不同的消費(fèi)者類型,分別是?PushConsumer、SimpleConsumer?和?PullConsumer,需要的朋友可以參考下
    2023-10-10
  • SpringCloud的Gateway網(wǎng)關(guān)詳解

    SpringCloud的Gateway網(wǎng)關(guān)詳解

    這篇文章主要介紹了SpringCloud的Gateway網(wǎng)關(guān)詳解,Gateway 是 Spring Cloud 官方推出的一個(gè)基于 Spring 5、Spring Boot 2 和 Project Reactor 的 API 網(wǎng)關(guān)實(shí)現(xiàn),本文將介紹 Spring Cloud Gateway 的基本概念、核心組件以及如何配置和使用它,需要的朋友可以參考下
    2023-09-09
  • JAVA后臺(tái)轉(zhuǎn)換成樹(shù)結(jié)構(gòu)數(shù)據(jù)返回給前端的實(shí)現(xiàn)方法

    JAVA后臺(tái)轉(zhuǎn)換成樹(shù)結(jié)構(gòu)數(shù)據(jù)返回給前端的實(shí)現(xiàn)方法

    這篇文章主要介紹了JAVA后臺(tái)轉(zhuǎn)換成樹(shù)結(jié)構(gòu)數(shù)據(jù)返回給前端的實(shí)現(xiàn)方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-03-03
  • javascript checkbox全選和反選的簡(jiǎn)單實(shí)現(xiàn)

    javascript checkbox全選和反選的簡(jiǎn)單實(shí)現(xiàn)

    這篇文章主要介紹了javascript checkbox全選和反選的簡(jiǎn)單實(shí)現(xiàn)的相關(guān)資料,需要的朋友可以參考下
    2017-05-05

最新評(píng)論