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.io.IOException; 287c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichetimport java.io.Writer; 297c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichetimport java.lang.reflect.Array; 307c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichetimport java.util.ArrayList; 317c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichetimport java.util.Collection; 327c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichetimport java.util.Iterator; 337c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichetimport java.util.Map; 347c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 357c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet/** 367c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * A JSONArray is an ordered sequence of values. Its external text form is a 377c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * string wrapped in square brackets with commas separating the values. The 387c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * internal form is an object having <code>get</code> and <code>opt</code> 397c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * methods for accessing the values by index, and <code>put</code> methods for 407c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * adding or replacing values. The values can be any of these types: 417c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * <code>Boolean</code>, <code>JSONArray</code>, <code>JSONObject</code>, 427c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * <code>Number</code>, <code>String</code>, or the 437c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * <code>JSONObject.NULL object</code>. 447c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * <p> 457c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * The constructor can convert a JSON text into a Java object. The 467c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * <code>toString</code> method converts to JSON text. 477c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * <p> 487c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * A <code>get</code> method returns a value if one can be found, and throws an 497c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * exception if one cannot be found. An <code>opt</code> method returns a 507c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * default value instead of throwing an exception, and so is useful for 517c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * obtaining optional values. 527c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * <p> 537c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * The generic <code>get()</code> and <code>opt()</code> methods return an 547c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * object which you can cast or query for type. There are also typed 557c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * <code>get</code> and <code>opt</code> methods that do type checking and type 567c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * coercion for you. 577c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * <p> 587c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * The texts produced by the <code>toString</code> methods strictly conform to 597c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * JSON syntax rules. The constructors are more forgiving in the texts they will 607c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * accept: 617c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * <ul> 627c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * <li>An extra <code>,</code> <small>(comma)</small> may appear just 637c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * before the closing bracket.</li> 647c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * <li>The <code>null</code> value will be inserted when there 657c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * is <code>,</code> <small>(comma)</small> elision.</li> 667c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * <li>Strings may be quoted with <code>'</code> <small>(single 677c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * quote)</small>.</li> 687c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * <li>Strings do not need to be quoted at all if they do not begin with a quote 697c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * or single quote, and if they do not contain leading or trailing spaces, 707c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * and if they do not contain any of these characters: 717c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * <code>{ } [ ] / \ : , = ; #</code> and if they do not look like numbers 727c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * and if they are not the reserved words <code>true</code>, 737c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * <code>false</code>, or <code>null</code>.</li> 747c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * <li>Values can be separated by <code>;</code> <small>(semicolon)</small> as 757c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * well as by <code>,</code> <small>(comma)</small>.</li> 767c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * <li>Numbers may have the <code>0-</code> <small>(octal)</small> or 777c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * <code>0x-</code> <small>(hex)</small> prefix.</li> 787c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * </ul> 797c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 807c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * @author JSON.org 817c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * @version 2009-04-13 827c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet */ 837c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichetpublic class JSONArray { 847c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 857c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 867c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet /** 877c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * The arrayList where the JSONArray's properties are kept. 887c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet */ 897c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet private ArrayList myArrayList; 907c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 917c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 927c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet /** 937c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * Construct an empty JSONArray. 947c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet */ 957c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet public JSONArray() { 967c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet this.myArrayList = new ArrayList(); 977c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet } 987c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 997c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet /** 1007c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * Construct a JSONArray from a JSONTokener. 1017c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * @param x A JSONTokener 1027c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * @throws JSONException If there is a syntax error. 1037c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet */ 1047c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet public JSONArray(JSONTokener x) throws JSONException { 1057c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet this(); 1067c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet char c = x.nextClean(); 1077c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet char q; 1087c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet if (c == '[') { 1097c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet q = ']'; 1107c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet } else if (c == '(') { 1117c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet q = ')'; 1127c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet } else { 1137c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet throw x.syntaxError("A JSONArray text must start with '['"); 1147c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet } 1157c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet if (x.nextClean() == ']') { 1167c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet return; 1177c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet } 1187c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet x.back(); 1197c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet for (;;) { 1207c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet if (x.nextClean() == ',') { 1217c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet x.back(); 1227c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet this.myArrayList.add(null); 1237c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet } else { 1247c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet x.back(); 1257c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet this.myArrayList.add(x.nextValue()); 1267c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet } 1277c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet c = x.nextClean(); 1287c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet switch (c) { 1297c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet case ';': 1307c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet case ',': 1317c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet if (x.nextClean() == ']') { 1327c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet return; 1337c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet } 1347c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet x.back(); 1357c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet break; 1367c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet case ']': 1377c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet case ')': 1387c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet if (q != c) { 1397c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet throw x.syntaxError("Expected a '" + new Character(q) + "'"); 1407c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet } 1417c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet return; 1427c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet default: 1437c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet throw x.syntaxError("Expected a ',' or ']'"); 1447c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet } 1457c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet } 1467c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet } 1477c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 1487c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 1497c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet /** 1507c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * Construct a JSONArray from a source JSON text. 1517c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * @param source A string that begins with 1527c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * <code>[</code> <small>(left bracket)</small> 1537c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * and ends with <code>]</code> <small>(right bracket)</small>. 1547c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * @throws JSONException If there is a syntax error. 1557c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet */ 1567c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet public JSONArray(String source) throws JSONException { 1577c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet this(new JSONTokener(source)); 1587c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet } 1597c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 1607c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 1617c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet /** 1627c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * Construct a JSONArray from a Collection. 1637c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * @param collection A Collection. 1647c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet */ 1657c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet public JSONArray(Collection collection) { 1667c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet this.myArrayList = (collection == null) ? 1677c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet new ArrayList() : 1687c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet new ArrayList(collection); 1697c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet } 1707c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 1717c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet /** 1727c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * Construct a JSONArray from a collection of beans. 1737c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * The collection should have Java Beans. 1747c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * 1757c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * @throws JSONException If not an array. 1767c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet */ 1777c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 1787c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet public JSONArray(Collection collection, boolean includeSuperClass) { 1797c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet this.myArrayList = new ArrayList(); 1807c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet if (collection != null) { 1817c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet Iterator iter = collection.iterator();; 1827c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet while (iter.hasNext()) { 1837c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet Object o = iter.next(); 1847c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet if (o instanceof Map) { 1857c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet this.myArrayList.add(new JSONObject((Map)o, includeSuperClass)); 1867c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet } else if (!JSONObject.isStandardProperty(o.getClass())) { 1877c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet this.myArrayList.add(new JSONObject(o, includeSuperClass)); 1887c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet } else { 1897c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet this.myArrayList.add(o); 1907c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet } 1917c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet } 1927c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet } 1937c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet } 1947c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 1957c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 1967c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet /** 1977c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * Construct a JSONArray from an array 1987c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * @throws JSONException If not an array. 1997c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet */ 2007c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet public JSONArray(Object array) throws JSONException { 2017c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet this(); 2027c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet if (array.getClass().isArray()) { 2037c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet int length = Array.getLength(array); 2047c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet for (int i = 0; i < length; i += 1) { 2057c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet this.put(Array.get(array, i)); 2067c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet } 2077c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet } else { 2087c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet throw new JSONException("JSONArray initial value should be a string or collection or array."); 2097c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet } 2107c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet } 2117c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 2127c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet /** 2137c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * Construct a JSONArray from an array with a bean. 2147c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * The array should have Java Beans. 2157c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * 2167c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * @throws JSONException If not an array. 2177c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet */ 2187c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet public JSONArray(Object array,boolean includeSuperClass) throws JSONException { 2197c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet this(); 2207c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet if (array.getClass().isArray()) { 2217c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet int length = Array.getLength(array); 2227c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet for (int i = 0; i < length; i += 1) { 2237c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet Object o = Array.get(array, i); 2247c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet if (JSONObject.isStandardProperty(o.getClass())) { 2257c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet this.myArrayList.add(o); 2267c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet } else { 2277c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet this.myArrayList.add(new JSONObject(o,includeSuperClass)); 2287c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet } 2297c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet } 2307c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet } else { 2317c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet throw new JSONException("JSONArray initial value should be a string or collection or array."); 2327c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet } 2337c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet } 2347c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 2357c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 2367c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 2377c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet /** 2387c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * Get the object value associated with an index. 2397c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * @param index 2407c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * The index must be between 0 and length() - 1. 2417c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * @return An object value. 2427c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * @throws JSONException If there is no value for the index. 2437c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet */ 2447c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet public Object get(int index) throws JSONException { 2457c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet Object o = opt(index); 2467c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet if (o == null) { 2477c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet throw new JSONException("JSONArray[" + index + "] not found."); 2487c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet } 2497c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet return o; 2507c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet } 2517c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 2527c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 2537c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet /** 2547c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * Get the boolean value associated with an index. 2557c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * The string values "true" and "false" are converted to boolean. 2567c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * 2577c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * @param index The index must be between 0 and length() - 1. 2587c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * @return The truth. 2597c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * @throws JSONException If there is no value for the index or if the 2607c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * value is not convertable to boolean. 2617c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet */ 2627c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet public boolean getBoolean(int index) throws JSONException { 2637c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet Object o = get(index); 2647c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet if (o.equals(Boolean.FALSE) || 2657c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet (o instanceof String && 2667c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet ((String)o).equalsIgnoreCase("false"))) { 2677c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet return false; 2687c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet } else if (o.equals(Boolean.TRUE) || 2697c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet (o instanceof String && 2707c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet ((String)o).equalsIgnoreCase("true"))) { 2717c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet return true; 2727c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet } 2737c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet throw new JSONException("JSONArray[" + index + "] is not a Boolean."); 2747c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet } 2757c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 2767c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 2777c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet /** 2787c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * Get the double value associated with an index. 2797c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * 2807c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * @param index The index must be between 0 and length() - 1. 2817c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * @return The value. 2827c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * @throws JSONException If the key is not found or if the value cannot 2837c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * be converted to a number. 2847c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet */ 2857c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet public double getDouble(int index) throws JSONException { 2867c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet Object o = get(index); 2877c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet try { 2887c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet return o instanceof Number ? 2897c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet ((Number)o).doubleValue() : 2907c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet Double.valueOf((String)o).doubleValue(); 2917c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet } catch (Exception e) { 2927c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet throw new JSONException("JSONArray[" + index + 2937c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet "] is not a number."); 2947c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet } 2957c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet } 2967c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 2977c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 2987c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet /** 2997c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * Get the int value associated with an index. 3007c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * 3017c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * @param index The index must be between 0 and length() - 1. 3027c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * @return The value. 3037c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * @throws JSONException If the key is not found or if the value cannot 3047c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * be converted to a number. 3057c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * if the value cannot be converted to a number. 3067c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet */ 3077c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet public int getInt(int index) throws JSONException { 3087c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet Object o = get(index); 3097c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet return o instanceof Number ? 3107c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet ((Number)o).intValue() : (int)getDouble(index); 3117c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet } 3127c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 3137c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 3147c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet /** 3157c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * Get the JSONArray associated with an index. 3167c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * @param index The index must be between 0 and length() - 1. 3177c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * @return A JSONArray value. 3187c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * @throws JSONException If there is no value for the index. or if the 3197c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * value is not a JSONArray 3207c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet */ 3217c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet public JSONArray getJSONArray(int index) throws JSONException { 3227c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet Object o = get(index); 3237c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet if (o instanceof JSONArray) { 3247c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet return (JSONArray)o; 3257c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet } 3267c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet throw new JSONException("JSONArray[" + index + 3277c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet "] is not a JSONArray."); 3287c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet } 3297c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 3307c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 3317c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet /** 3327c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * Get the JSONObject associated with an index. 3337c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * @param index subscript 3347c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * @return A JSONObject value. 3357c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * @throws JSONException If there is no value for the index or if the 3367c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * value is not a JSONObject 3377c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet */ 3387c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet public JSONObject getJSONObject(int index) throws JSONException { 3397c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet Object o = get(index); 3407c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet if (o instanceof JSONObject) { 3417c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet return (JSONObject)o; 3427c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet } 3437c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet throw new JSONException("JSONArray[" + index + 3447c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet "] is not a JSONObject."); 3457c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet } 3467c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 3477c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 3487c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet /** 3497c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * Get the long value associated with an index. 3507c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * 3517c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * @param index The index must be between 0 and length() - 1. 3527c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * @return The value. 3537c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * @throws JSONException If the key is not found or if the value cannot 3547c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * be converted to a number. 3557c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet */ 3567c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet public long getLong(int index) throws JSONException { 3577c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet Object o = get(index); 3587c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet return o instanceof Number ? 3597c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet ((Number)o).longValue() : (long)getDouble(index); 3607c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet } 3617c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 3627c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 3637c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet /** 3647c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * Get the string associated with an index. 3657c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * @param index The index must be between 0 and length() - 1. 3667c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * @return A string value. 3677c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * @throws JSONException If there is no value for the index. 3687c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet */ 3697c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet public String getString(int index) throws JSONException { 3707c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet return get(index).toString(); 3717c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet } 3727c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 3737c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 3747c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet /** 3757c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * Determine if the value is null. 3767c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * @param index The index must be between 0 and length() - 1. 3777c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * @return true if the value at the index is null, or if there is no value. 3787c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet */ 3797c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet public boolean isNull(int index) { 3807c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet return JSONObject.NULL.equals(opt(index)); 3817c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet } 3827c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 3837c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 3847c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet /** 3857c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * Make a string from the contents of this JSONArray. The 3867c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * <code>separator</code> string is inserted between each element. 3877c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * Warning: This method assumes that the data structure is acyclical. 3887c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * @param separator A string that will be inserted between the elements. 3897c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * @return a string. 3907c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * @throws JSONException If the array contains an invalid number. 3917c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet */ 3927c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet public String join(String separator) throws JSONException { 3937c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet int len = length(); 3947c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet StringBuffer sb = new StringBuffer(); 3957c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 3967c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet for (int i = 0; i < len; i += 1) { 3977c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet if (i > 0) { 3987c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet sb.append(separator); 3997c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet } 4007c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet sb.append(JSONObject.valueToString(this.myArrayList.get(i))); 4017c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet } 4027c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet return sb.toString(); 4037c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet } 4047c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 4057c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 4067c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet /** 4077c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * Get the number of elements in the JSONArray, included nulls. 4087c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * 4097c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * @return The length (or size). 4107c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet */ 4117c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet public int length() { 4127c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet return this.myArrayList.size(); 4137c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet } 4147c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 4157c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 4167c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet /** 4177c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * Get the optional object value associated with an index. 4187c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * @param index The index must be between 0 and length() - 1. 4197c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * @return An object value, or null if there is no 4207c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * object at that index. 4217c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet */ 4227c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet public Object opt(int index) { 4237c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet return (index < 0 || index >= length()) ? 4247c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet null : this.myArrayList.get(index); 4257c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet } 4267c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 4277c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 4287c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet /** 4297c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * Get the optional boolean value associated with an index. 4307c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * It returns false if there is no value at that index, 4317c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * or if the value is not Boolean.TRUE or the String "true". 4327c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * 4337c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * @param index The index must be between 0 and length() - 1. 4347c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * @return The truth. 4357c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet */ 4367c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet public boolean optBoolean(int index) { 4377c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet return optBoolean(index, false); 4387c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet } 4397c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 4407c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 4417c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet /** 4427c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * Get the optional boolean value associated with an index. 4437c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * It returns the defaultValue if there is no value at that index or if 4447c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * it is not a Boolean or the String "true" or "false" (case insensitive). 4457c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * 4467c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * @param index The index must be between 0 and length() - 1. 4477c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * @param defaultValue A boolean default. 4487c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * @return The truth. 4497c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet */ 4507c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet public boolean optBoolean(int index, boolean defaultValue) { 4517c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet try { 4527c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet return getBoolean(index); 4537c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet } catch (Exception e) { 4547c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet return defaultValue; 4557c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet } 4567c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet } 4577c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 4587c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 4597c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet /** 4607c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * Get the optional double value associated with an index. 4617c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * NaN is returned if there is no value for the index, 4627c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * or if the value is not a number and cannot be converted to a number. 4637c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * 4647c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * @param index The index must be between 0 and length() - 1. 4657c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * @return The value. 4667c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet */ 4677c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet public double optDouble(int index) { 4687c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet return optDouble(index, Double.NaN); 4697c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet } 4707c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 4717c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 4727c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet /** 4737c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * Get the optional double value associated with an index. 4747c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * The defaultValue is returned if there is no value for the index, 4757c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * or if the value is not a number and cannot be converted to a number. 4767c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * 4777c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * @param index subscript 4787c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * @param defaultValue The default value. 4797c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * @return The value. 4807c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet */ 4817c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet public double optDouble(int index, double defaultValue) { 4827c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet try { 4837c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet return getDouble(index); 4847c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet } catch (Exception e) { 4857c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet return defaultValue; 4867c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet } 4877c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet } 4887c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 4897c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 4907c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet /** 4917c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * Get the optional int value associated with an index. 4927c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * Zero is returned if there is no value for the index, 4937c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * or if the value is not a number and cannot be converted to a number. 4947c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * 4957c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * @param index The index must be between 0 and length() - 1. 4967c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * @return The value. 4977c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet */ 4987c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet public int optInt(int index) { 4997c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet return optInt(index, 0); 5007c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet } 5017c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 5027c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 5037c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet /** 5047c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * Get the optional int value associated with an index. 5057c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * The defaultValue is returned if there is no value for the index, 5067c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * or if the value is not a number and cannot be converted to a number. 5077c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * @param index The index must be between 0 and length() - 1. 5087c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * @param defaultValue The default value. 5097c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * @return The value. 5107c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet */ 5117c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet public int optInt(int index, int defaultValue) { 5127c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet try { 5137c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet return getInt(index); 5147c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet } catch (Exception e) { 5157c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet return defaultValue; 5167c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet } 5177c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet } 5187c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 5197c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 5207c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet /** 5217c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * Get the optional JSONArray associated with an index. 5227c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * @param index subscript 5237c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * @return A JSONArray value, or null if the index has no value, 5247c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * or if the value is not a JSONArray. 5257c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet */ 5267c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet public JSONArray optJSONArray(int index) { 5277c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet Object o = opt(index); 5287c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet return o instanceof JSONArray ? (JSONArray)o : null; 5297c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet } 5307c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 5317c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 5327c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet /** 5337c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * Get the optional JSONObject associated with an index. 5347c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * Null is returned if the key is not found, or null if the index has 5357c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * no value, or if the value is not a JSONObject. 5367c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * 5377c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * @param index The index must be between 0 and length() - 1. 5387c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * @return A JSONObject value. 5397c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet */ 5407c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet public JSONObject optJSONObject(int index) { 5417c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet Object o = opt(index); 5427c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet return o instanceof JSONObject ? (JSONObject)o : null; 5437c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet } 5447c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 5457c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 5467c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet /** 5477c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * Get the optional long value associated with an index. 5487c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * Zero is returned if there is no value for the index, 5497c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * or if the value is not a number and cannot be converted to a number. 5507c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * 5517c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * @param index The index must be between 0 and length() - 1. 5527c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * @return The value. 5537c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet */ 5547c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet public long optLong(int index) { 5557c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet return optLong(index, 0); 5567c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet } 5577c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 5587c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 5597c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet /** 5607c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * Get the optional long value associated with an index. 5617c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * The defaultValue is returned if there is no value for the index, 5627c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * or if the value is not a number and cannot be converted to a number. 5637c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * @param index The index must be between 0 and length() - 1. 5647c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * @param defaultValue The default value. 5657c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * @return The value. 5667c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet */ 5677c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet public long optLong(int index, long defaultValue) { 5687c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet try { 5697c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet return getLong(index); 5707c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet } catch (Exception e) { 5717c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet return defaultValue; 5727c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet } 5737c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet } 5747c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 5757c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 5767c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet /** 5777c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * Get the optional string value associated with an index. It returns an 5787c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * empty string if there is no value at that index. If the value 5797c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * is not a string and is not null, then it is coverted to a string. 5807c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * 5817c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * @param index The index must be between 0 and length() - 1. 5827c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * @return A String value. 5837c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet */ 5847c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet public String optString(int index) { 5857c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet return optString(index, ""); 5867c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet } 5877c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 5887c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 5897c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet /** 5907c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * Get the optional string associated with an index. 5917c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * The defaultValue is returned if the key is not found. 5927c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * 5937c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * @param index The index must be between 0 and length() - 1. 5947c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * @param defaultValue The default value. 5957c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * @return A String value. 5967c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet */ 5977c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet public String optString(int index, String defaultValue) { 5987c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet Object o = opt(index); 5997c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet return o != null ? o.toString() : defaultValue; 6007c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet } 6017c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 6027c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 6037c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet /** 6047c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * Append a boolean value. This increases the array's length by one. 6057c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * 6067c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * @param value A boolean value. 6077c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * @return this. 6087c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet */ 6097c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet public JSONArray put(boolean value) { 6107c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet put(value ? Boolean.TRUE : Boolean.FALSE); 6117c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet return this; 6127c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet } 6137c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 6147c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 6157c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet /** 6167c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * Put a value in the JSONArray, where the value will be a 6177c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * JSONArray which is produced from a Collection. 6187c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * @param value A Collection value. 6197c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * @return this. 6207c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet */ 6217c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet public JSONArray put(Collection value) { 6227c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet put(new JSONArray(value)); 6237c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet return this; 6247c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet } 6257c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 6267c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 6277c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet /** 6287c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * Append a double value. This increases the array's length by one. 6297c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * 6307c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * @param value A double value. 6317c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * @throws JSONException if the value is not finite. 6327c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * @return this. 6337c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet */ 6347c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet public JSONArray put(double value) throws JSONException { 6357c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet Double d = new Double(value); 6367c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet JSONObject.testValidity(d); 6377c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet put(d); 6387c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet return this; 6397c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet } 6407c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 6417c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 6427c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet /** 6437c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * Append an int value. This increases the array's length by one. 6447c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * 6457c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * @param value An int value. 6467c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * @return this. 6477c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet */ 6487c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet public JSONArray put(int value) { 6497c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet put(new Integer(value)); 6507c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet return this; 6517c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet } 6527c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 6537c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 6547c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet /** 6557c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * Append an long value. This increases the array's length by one. 6567c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * 6577c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * @param value A long value. 6587c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * @return this. 6597c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet */ 6607c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet public JSONArray put(long value) { 6617c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet put(new Long(value)); 6627c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet return this; 6637c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet } 6647c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 6657c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 6667c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet /** 6677c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * Put a value in the JSONArray, where the value will be a 6687c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * JSONObject which is produced from a Map. 6697c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * @param value A Map value. 6707c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * @return this. 6717c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet */ 6727c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet public JSONArray put(Map value) { 6737c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet put(new JSONObject(value)); 6747c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet return this; 6757c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet } 6767c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 6777c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 6787c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet /** 6797c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * Append an object value. This increases the array's length by one. 6807c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * @param value An object value. The value should be a 6817c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * Boolean, Double, Integer, JSONArray, JSONObject, Long, or String, or the 6827c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * JSONObject.NULL object. 6837c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * @return this. 6847c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet */ 6857c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet public JSONArray put(Object value) { 6867c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet this.myArrayList.add(value); 6877c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet return this; 6887c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet } 6897c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 6907c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 6917c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet /** 6927c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * Put or replace a boolean value in the JSONArray. If the index is greater 6937c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * than the length of the JSONArray, then null elements will be added as 6947c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * necessary to pad it out. 6957c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * @param index The subscript. 6967c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * @param value A boolean value. 6977c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * @return this. 6987c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * @throws JSONException If the index is negative. 6997c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet */ 7007c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet public JSONArray put(int index, boolean value) throws JSONException { 7017c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet put(index, value ? Boolean.TRUE : Boolean.FALSE); 7027c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet return this; 7037c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet } 7047c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 7057c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 7067c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet /** 7077c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * Put a value in the JSONArray, where the value will be a 7087c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * JSONArray which is produced from a Collection. 7097c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * @param index The subscript. 7107c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * @param value A Collection value. 7117c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * @return this. 7127c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * @throws JSONException If the index is negative or if the value is 7137c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * not finite. 7147c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet */ 7157c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet public JSONArray put(int index, Collection value) throws JSONException { 7167c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet put(index, new JSONArray(value)); 7177c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet return this; 7187c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet } 7197c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 7207c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 7217c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet /** 7227c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * Put or replace a double value. If the index is greater than the length of 7237c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * the JSONArray, then null elements will be added as necessary to pad 7247c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * it out. 7257c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * @param index The subscript. 7267c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * @param value A double value. 7277c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * @return this. 7287c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * @throws JSONException If the index is negative or if the value is 7297c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * not finite. 7307c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet */ 7317c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet public JSONArray put(int index, double value) throws JSONException { 7327c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet put(index, new Double(value)); 7337c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet return this; 7347c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet } 7357c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 7367c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 7377c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet /** 7387c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * Put or replace an int value. If the index is greater than the length of 7397c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * the JSONArray, then null elements will be added as necessary to pad 7407c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * it out. 7417c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * @param index The subscript. 7427c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * @param value An int value. 7437c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * @return this. 7447c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * @throws JSONException If the index is negative. 7457c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet */ 7467c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet public JSONArray put(int index, int value) throws JSONException { 7477c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet put(index, new Integer(value)); 7487c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet return this; 7497c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet } 7507c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 7517c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 7527c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet /** 7537c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * Put or replace a long value. If the index is greater than the length of 7547c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * the JSONArray, then null elements will be added as necessary to pad 7557c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * it out. 7567c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * @param index The subscript. 7577c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * @param value A long value. 7587c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * @return this. 7597c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * @throws JSONException If the index is negative. 7607c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet */ 7617c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet public JSONArray put(int index, long value) throws JSONException { 7627c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet put(index, new Long(value)); 7637c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet return this; 7647c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet } 7657c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 7667c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 7677c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet /** 7687c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * Put a value in the JSONArray, where the value will be a 7697c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * JSONObject which is produced from a Map. 7707c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * @param index The subscript. 7717c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * @param value The Map value. 7727c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * @return this. 7737c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * @throws JSONException If the index is negative or if the the value is 7747c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * an invalid number. 7757c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet */ 7767c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet public JSONArray put(int index, Map value) throws JSONException { 7777c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet put(index, new JSONObject(value)); 7787c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet return this; 7797c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet } 7807c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 7817c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 7827c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet /** 7837c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * Put or replace an object value in the JSONArray. If the index is greater 7847c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * than the length of the JSONArray, then null elements will be added as 7857c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * necessary to pad it out. 7867c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * @param index The subscript. 7877c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * @param value The value to put into the array. The value should be a 7887c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * Boolean, Double, Integer, JSONArray, JSONObject, Long, or String, or the 7897c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * JSONObject.NULL object. 7907c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * @return this. 7917c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * @throws JSONException If the index is negative or if the the value is 7927c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * an invalid number. 7937c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet */ 7947c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet public JSONArray put(int index, Object value) throws JSONException { 7957c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet JSONObject.testValidity(value); 7967c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet if (index < 0) { 7977c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet throw new JSONException("JSONArray[" + index + "] not found."); 7987c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet } 7997c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet if (index < length()) { 8007c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet this.myArrayList.set(index, value); 8017c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet } else { 8027c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet while (index != length()) { 8037c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet put(JSONObject.NULL); 8047c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet } 8057c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet put(value); 8067c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet } 8077c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet return this; 8087c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet } 8097c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 8107c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 8117c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet /** 8127c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * Remove a index and close the hole. 8137c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * @param index The index of the element to be removed. 8147c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * @return The value that was associated with the index, 8157c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * or null if there was no value. 8167c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet */ 8177c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet public Object remove(int index) { 8187c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet Object o = opt(index); 8197c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet this.myArrayList.remove(index); 8207c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet return o; 8217c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet } 8227c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 8237c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 8247c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet /** 8257c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * Produce a JSONObject by combining a JSONArray of names with the values 8267c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * of this JSONArray. 8277c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * @param names A JSONArray containing a list of key strings. These will be 8287c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * paired with the values. 8297c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * @return A JSONObject, or null if there are no names or if this JSONArray 8307c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * has no values. 8317c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * @throws JSONException If any of the names are null. 8327c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet */ 8337c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet public JSONObject toJSONObject(JSONArray names) throws JSONException { 8347c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet if (names == null || names.length() == 0 || length() == 0) { 8357c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet return null; 8367c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet } 8377c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet JSONObject jo = new JSONObject(); 8387c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet for (int i = 0; i < names.length(); i += 1) { 8397c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet jo.put(names.getString(i), this.opt(i)); 8407c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet } 8417c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet return jo; 8427c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet } 8437c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 8447c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 8457c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet /** 8467c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * Make a JSON text of this JSONArray. For compactness, no 8477c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * unnecessary whitespace is added. If it is not possible to produce a 8487c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * syntactically correct JSON text then null will be returned instead. This 8497c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * could occur if the array contains an invalid number. 8507c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * <p> 8517c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * Warning: This method assumes that the data structure is acyclical. 8527c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * 8537c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * @return a printable, displayable, transmittable 8547c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * representation of the array. 8557c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet */ 8567c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet public String toString() { 8577c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet try { 8587c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet return '[' + join(",") + ']'; 8597c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet } catch (Exception e) { 8607c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet return null; 8617c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet } 8627c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet } 8637c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 8647c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 8657c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet /** 8667c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * Make a prettyprinted JSON text of this JSONArray. 8677c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * Warning: This method assumes that the data structure is acyclical. 8687c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * @param indentFactor The number of spaces to add to each level of 8697c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * indentation. 8707c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * @return a printable, displayable, transmittable 8717c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * representation of the object, beginning 8727c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * with <code>[</code> <small>(left bracket)</small> and ending 8737c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * with <code>]</code> <small>(right bracket)</small>. 8747c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * @throws JSONException 8757c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet */ 8767c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet public String toString(int indentFactor) throws JSONException { 8777c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet return toString(indentFactor, 0); 8787c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet } 8797c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 8807c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 8817c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet /** 8827c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * Make a prettyprinted JSON text of this JSONArray. 8837c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * Warning: This method assumes that the data structure is acyclical. 8847c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * @param indentFactor The number of spaces to add to each level of 8857c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * indentation. 8867c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * @param indent The indention of the top level. 8877c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * @return a printable, displayable, transmittable 8887c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * representation of the array. 8897c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * @throws JSONException 8907c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet */ 8917c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet String toString(int indentFactor, int indent) throws JSONException { 8927c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet int len = length(); 8937c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet if (len == 0) { 8947c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet return "[]"; 8957c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet } 8967c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet int i; 8977c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet StringBuffer sb = new StringBuffer("["); 8987c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet if (len == 1) { 8997c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet sb.append(JSONObject.valueToString(this.myArrayList.get(0), 9007c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet indentFactor, indent)); 9017c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet } else { 9027c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet int newindent = indent + indentFactor; 9037c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet sb.append('\n'); 9047c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet for (i = 0; i < len; i += 1) { 9057c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet if (i > 0) { 9067c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet sb.append(",\n"); 9077c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet } 9087c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet for (int j = 0; j < newindent; j += 1) { 9097c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet sb.append(' '); 9107c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet } 9117c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet sb.append(JSONObject.valueToString(this.myArrayList.get(i), 9127c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet indentFactor, newindent)); 9137c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet } 9147c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet sb.append('\n'); 9157c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet for (i = 0; i < indent; i += 1) { 9167c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet sb.append(' '); 9177c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet } 9187c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet } 9197c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet sb.append(']'); 9207c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet return sb.toString(); 9217c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet } 9227c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 9237c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 9247c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet /** 9257c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * Write the contents of the JSONArray as JSON text to a writer. 9267c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * For compactness, no whitespace is added. 9277c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * <p> 9287c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * Warning: This method assumes that the data structure is acyclical. 9297c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * 9307c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * @return The writer. 9317c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * @throws JSONException 9327c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet */ 9337c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet public Writer write(Writer writer) throws JSONException { 9347c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet try { 9357c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet boolean b = false; 9367c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet int len = length(); 9377c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 9387c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet writer.write('['); 9397c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet 9407c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet for (int i = 0; i < len; i += 1) { 9417c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet if (b) { 9427c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet writer.write(','); 9437c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet } 9447c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet Object v = this.myArrayList.get(i); 9457c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet if (v instanceof JSONObject) { 9467c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet ((JSONObject)v).write(writer); 9477c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet } else if (v instanceof JSONArray) { 9487c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet ((JSONArray)v).write(writer); 9497c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet } else { 9507c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet writer.write(JSONObject.valueToString(v)); 9517c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet } 9527c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet b = true; 9537c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet } 9547c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet writer.write(']'); 9557c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet return writer; 9567c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet } catch (IOException e) { 9577c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet throw new JSONException(e); 9587c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet } 9597c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet } 9607c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet}