+++ /dev/null
-/*--------------------------------------------------------------------------\r
- * Copyright 2007 Taro L. Saito\r
- *\r
- * Licensed under the Apache License, Version 2.0 (the "License");\r
- * you may not use this file except in compliance with the License.\r
- * You may obtain a copy of the License at\r
- *\r
- * http://www.apache.org/licenses/LICENSE-2.0\r
- *\r
- * Unless required by applicable law or agreed to in writing, software\r
- * distributed under the License is distributed on an "AS IS" BASIS,\r
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
- * See the License for the specific language governing permissions and\r
- * limitations under the License.\r
- *--------------------------------------------------------------------------*/\r
-//--------------------------------------\r
-// XerialJ Project\r
-//\r
-// JSONArray.java\r
-// Since: Apr 4, 2007\r
-//\r
-// $URL: http://dev.utgenome.org/svn/utgb/trunk/common/src/org/utgenome/json/JSONArray.java $ \r
-// $Author: leo $\r
-//--------------------------------------\r
-package org.xerial.json;\r
-\r
-import java.util.ArrayList;\r
-import java.util.Iterator;\r
-import java.util.List;\r
-\r
-import org.antlr.runtime.ANTLRStringStream;\r
-import org.antlr.runtime.CommonTokenStream;\r
-import org.antlr.runtime.RecognitionException;\r
-import org.antlr.runtime.tree.CommonTree;\r
-import org.xerial.json.impl.JSONLexer;\r
-import org.xerial.json.impl.JSONParser;\r
-import org.xerial.json.impl.JSONTokenizer;\r
-\r
-public class JSONArray extends JSONValueBase implements Iterable<JSONValue>\r
-{\r
-\r
- private final ArrayList<JSONValue> _array = new ArrayList<JSONValue>();\r
-\r
- public JSONArray()\r
- {}\r
-\r
- public JSONArray(List<JSONValue> elemList)\r
- {\r
- _array.ensureCapacity(elemList.size());\r
- for (JSONValue v : elemList)\r
- _array.add(v);\r
- }\r
-\r
- JSONArray(JSONPullParser parser) throws JSONException\r
- {\r
- JSONEvent e = parser.next();\r
- if (e != JSONEvent.StartArray)\r
- throw new JSONException(JSONErrorCode.ParseError, "expected [, but " + e);\r
-\r
- parseArray(this, parser);\r
- }\r
-\r
- private static JSONArray parseArray(JSONArray array, JSONPullParser parser) throws JSONException\r
- {\r
- JSONEvent e;\r
-\r
- while ((e = parser.next()) != JSONEvent.EndJSON)\r
- {\r
- switch (e)\r
- {\r
- case Integer:\r
- case Double:\r
- case Boolean:\r
- case Null:\r
- case String:\r
- array.add(parser.getValue());\r
- break;\r
- case StartObject:\r
- array.add(parseObject(parser));\r
- break;\r
- case EndObject:\r
- break;\r
- case StartArray:\r
- array.add(parseArray(new JSONArray(), parser));\r
- break;\r
- case EndArray:\r
- return array;\r
- }\r
-\r
- }\r
-\r
- return array;\r
-\r
- }\r
-\r
- private static JSONObject parseObject(JSONPullParser parser) throws JSONException\r
- {\r
- JSONEvent e = parser.next();\r
-\r
- JSONObject obj = new JSONObject();\r
-\r
- while ((e = parser.next()) != JSONEvent.EndJSON)\r
- {\r
- switch (e)\r
- {\r
- case Integer:\r
- case Double:\r
- case Boolean:\r
- case Null:\r
- case String:\r
- String key = parser.getKeyName();\r
-\r
- // if first child element is value attribute\r
- if (key != null)\r
- {\r
- obj.put(key, parser.getValue());\r
- }\r
- break;\r
- case StartObject:\r
- obj.put(parser.getKeyName(), parseObject(parser));\r
- break;\r
- case EndObject:\r
- return obj;\r
- case StartArray:\r
- obj.put(parser.getKeyName(), parseArray(new JSONArray(), parser));\r
- break;\r
- case EndArray:\r
- break;\r
- }\r
-\r
- }\r
- return obj;\r
-\r
- }\r
-\r
- public JSONArray(JSONTokenizer tokenizer) throws JSONException\r
- {\r
-\r
- char c = tokenizer.nextClean();\r
- char q;\r
- if (c == '[')\r
- {\r
- q = ']';\r
- }\r
- else if (c == '(')\r
- {\r
- q = ')';\r
- }\r
- else\r
- {\r
- throw tokenizer.syntaxError("A JSONArray text must start with '['");\r
- }\r
- if (tokenizer.nextClean() == ']')\r
- {\r
- return;\r
- }\r
- tokenizer.back();\r
- for (;;)\r
- {\r
- if (tokenizer.nextClean() == ',')\r
- {\r
- tokenizer.back();\r
- _array.add(null);\r
- }\r
- else\r
- {\r
- tokenizer.back();\r
- _array.add(tokenizer.nextValue());\r
- }\r
- c = tokenizer.nextClean();\r
- switch (c)\r
- {\r
- case ';':\r
- case ',':\r
- if (tokenizer.nextClean() == ']')\r
- {\r
- return;\r
- }\r
- tokenizer.back();\r
- break;\r
- case ']':\r
- case ')':\r
- if (q != c)\r
- {\r
- throw tokenizer.syntaxError("Expected a '" + new Character(q) + "'");\r
- }\r
- return;\r
- default:\r
- throw tokenizer.syntaxError("Expected a ',' or ']'");\r
- }\r
- }\r
- }\r
-\r
- public JSONArray(String jsonStr) throws JSONException\r
- {\r
- this(new JSONTokenizer(jsonStr));\r
- }\r
-\r
- public static CommonTree parse(String jsonStr) throws JSONException\r
- {\r
- JSONLexer lexer = new JSONLexer(new ANTLRStringStream(jsonStr));\r
- CommonTokenStream tokens = new CommonTokenStream(lexer);\r
- JSONParser parser = new JSONParser(tokens);\r
- try\r
- {\r
- JSONParser.jsonArray_return r = parser.jsonArray();\r
- return (CommonTree) r.getTree();\r
- }\r
- catch (RecognitionException e)\r
- {\r
- throw new JSONException(JSONErrorCode.InvalidJSONData, jsonStr + ": line=" + e.line + "("\r
- + e.charPositionInLine + ")");\r
- }\r
- }\r
-\r
- public void add(JSONValue value)\r
- {\r
- _array.add(value);\r
- }\r
-\r
- public void add(Object value) throws JSONException\r
- {\r
- _array.add(translateAsJSONValue(value));\r
- }\r
-\r
- public void add(String value)\r
- {\r
- _array.add(new JSONString(value));\r
- }\r
-\r
- public int size()\r
- {\r
- return _array.size();\r
- }\r
-\r
- public JSONValue get(int index)\r
- {\r
- return _array.get(index);\r
- }\r
-\r
- public JSONNumber getJSONNubmer(int index)\r
- {\r
- return _array.get(index).getJSONNumber();\r
- }\r
-\r
- public JSONInteger getJSONInteger(int index)\r
- {\r
- JSONNumber n = _array.get(index).getJSONNumber();\r
- if (n != null && n instanceof JSONInteger)\r
- return (JSONInteger) n;\r
- else\r
- return null;\r
- }\r
-\r
- public JSONDouble getJSONDouble(int index)\r
- {\r
- JSONNumber n = _array.get(index).getJSONNumber();\r
- if (n != null && n instanceof JSONDouble)\r
- return (JSONDouble) n;\r
- else\r
- return null;\r
- }\r
-\r
- public JSONObject getJSONObject(int index)\r
- {\r
- return _array.get(index).getJSONObject();\r
- }\r
-\r
- @Override\r
- public JSONArray getJSONArray()\r
- {\r
- return this;\r
- }\r
-\r
- public JSONArray getJSONArray(int i)\r
- {\r
- JSONValue v = get(i);\r
- if (v instanceof JSONArray)\r
- return (JSONArray) v;\r
- else\r
- return null;\r
- }\r
-\r
- public JSONBoolean getJSONBoolean(int index)\r
- {\r
- return _array.get(index).getJSONBoolean();\r
- }\r
-\r
- public JSONNull getJSONNull(int index)\r
- {\r
- return _array.get(index).getJSONNull();\r
- }\r
-\r
- public Iterator<JSONValue> iterator()\r
- {\r
- return _array.iterator();\r
- }\r
-\r
- public String toString()\r
- {\r
- return toJSONString();\r
- }\r
-\r
- public String toJSONString()\r
- {\r
- StringBuilder out = new StringBuilder();\r
- out.append("[");\r
- ArrayList<String> elemString = new ArrayList<String>();\r
- for (JSONValue e : _array)\r
- elemString.add(e.toJSONString());\r
- out.append(join(elemString, ","));\r
- out.append("]");\r
- return out.toString();\r
- }\r
-\r
- public String getString(int i)\r
- {\r
- return get(i).toString();\r
- }\r
-\r
- public JSONValueType getValueType()\r
- {\r
- return JSONValueType.Array;\r
- }\r
-\r
-}\r