17c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichetpackage com.google.polo.json; 27c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 37c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet/* 47c9978567a202d6aa98beac5da5e1b3b34792862Jerome PoichetCopyright (c) 2002 JSON.org 57c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 67c9978567a202d6aa98beac5da5e1b3b34792862Jerome PoichetPermission is hereby granted, free of charge, to any person obtaining a copy 77c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichetof this software and associated documentation files (the "Software"), to deal 87c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichetin the Software without restriction, including without limitation the rights 97c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichetto use, copy, modify, merge, publish, distribute, sublicense, and/or sell 107c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichetcopies of the Software, and to permit persons to whom the Software is 117c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichetfurnished to do so, subject to the following conditions: 127c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 137c9978567a202d6aa98beac5da5e1b3b34792862Jerome PoichetThe above copyright notice and this permission notice shall be included in all 147c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichetcopies or substantial portions of the Software. 157c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 167c9978567a202d6aa98beac5da5e1b3b34792862Jerome PoichetThe Software shall be used for Good, not Evil. 177c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 187c9978567a202d6aa98beac5da5e1b3b34792862Jerome PoichetTHE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 197c9978567a202d6aa98beac5da5e1b3b34792862Jerome PoichetIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 207c9978567a202d6aa98beac5da5e1b3b34792862Jerome PoichetFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 217c9978567a202d6aa98beac5da5e1b3b34792862Jerome PoichetAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 227c9978567a202d6aa98beac5da5e1b3b34792862Jerome PoichetLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 237c9978567a202d6aa98beac5da5e1b3b34792862Jerome PoichetOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 247c9978567a202d6aa98beac5da5e1b3b34792862Jerome PoichetSOFTWARE. 257c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet*/ 267c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 277c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichetimport java.util.Iterator; 287c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 297c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet/** 307c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * Convert a web browser cookie list string to a JSONObject and back. 317c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * @author JSON.org 327c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * @version 2008-09-18 337c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet */ 347c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichetpublic class CookieList { 357c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 367c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet /** 377c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * Convert a cookie list into a JSONObject. A cookie list is a sequence 387c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * of name/value pairs. The names are separated from the values by '='. 397c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * The pairs are separated by ';'. The names and the values 407c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * will be unescaped, possibly converting '+' and '%' sequences. 417c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * 427c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * To add a cookie to a cooklist, 437c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * cookielistJSONObject.put(cookieJSONObject.getString("name"), 447c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * cookieJSONObject.getString("value")); 457c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * @param string A cookie list string 467c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * @return A JSONObject 477c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * @throws JSONException 487c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet */ 497c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet public static JSONObject toJSONObject(String string) throws JSONException { 507c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet JSONObject o = new JSONObject(); 517c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet JSONTokener x = new JSONTokener(string); 527c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet while (x.more()) { 537c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet String name = Cookie.unescape(x.nextTo('=')); 547c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet x.next('='); 557c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet o.put(name, Cookie.unescape(x.nextTo(';'))); 567c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet x.next(); 577c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet } 587c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet return o; 597c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet } 607c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 617c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 627c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet /** 637c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * Convert a JSONObject into a cookie list. A cookie list is a sequence 647c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * of name/value pairs. The names are separated from the values by '='. 657c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * The pairs are separated by ';'. The characters '%', '+', '=', and ';' 667c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * in the names and values are replaced by "%hh". 677c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * @param o A JSONObject 687c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * @return A cookie list string 697c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * @throws JSONException 707c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet */ 717c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet public static String toString(JSONObject o) throws JSONException { 727c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet boolean b = false; 737c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet Iterator keys = o.keys(); 747c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet String s; 757c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet StringBuffer sb = new StringBuffer(); 767c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet while (keys.hasNext()) { 777c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet s = keys.next().toString(); 787c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet if (!o.isNull(s)) { 797c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet if (b) { 807c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet sb.append(';'); 817c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet } 827c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet sb.append(Cookie.escape(s)); 837c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet sb.append("="); 847c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet sb.append(Cookie.escape(o.getString(s))); 857c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet b = true; 867c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet } 877c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet } 887c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet return sb.toString(); 897c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet } 907c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet} 91