private JSONArray enrichProperties(String operatorClass, JSONArray properties)
      throws JSONException {
    JSONArray result = new JSONArray();
    for (int i = 0; i < properties.length(); i++) {
      JSONObject propJ = properties.getJSONObject(i);
      String propName = WordUtils.capitalize(propJ.getString("name"));
      String getPrefix =
          (propJ.getString("type").equals("boolean")
                  || propJ.getString("type").equals("java.lang.Boolean"))
              ? "is"
              : "get";
      String setPrefix = "set";
      OperatorClassInfo oci =
          getOperatorClassWithGetterSetter(
              operatorClass, setPrefix + propName, getPrefix + propName);
      if (oci == null) {
        result.put(propJ);
        continue;
      }
      MethodInfo setterInfo = oci.setMethods.get(setPrefix + propName);
      MethodInfo getterInfo = oci.getMethods.get(getPrefix + propName);

      if ((getterInfo != null && getterInfo.omitFromUI)
          || (setterInfo != null && setterInfo.omitFromUI)) {
        continue;
      }
      if (setterInfo != null) {
        addTagsToProperties(setterInfo, propJ);
      } else if (getterInfo != null) {
        addTagsToProperties(getterInfo, propJ);
      }
      result.put(propJ);
    }
    return result;
  }
Ejemplo n.º 2
0
  /**
   * Blacklisting apps.
   *
   * @param code - Operation code.
   * @param data - Data required(Application data).
   */
  public void blacklistApps(String code, String data) {
    ArrayList<DeviceAppInfo> apps = appList.getInstalledApps();
    JSONArray appList = new JSONArray();
    String identity = null;
    try {
      JSONObject resultApp = new JSONObject(data);
      if (!resultApp.isNull(resources.getString(R.string.intent_extra_data))) {
        resultApp = (JSONObject) resultApp.get(resources.getString(R.string.intent_extra_data));
      }

      identity = (String) resultApp.get(resources.getString(R.string.intent_extra_identity));
    } catch (JSONException e) {
      Log.e(TAG, "Invalid JSON format." + e);
    }

    for (DeviceAppInfo app : apps) {
      JSONObject result = new JSONObject();
      try {
        result.put(resources.getString(R.string.intent_extra_name), app.getAppname());
        result.put(resources.getString(R.string.intent_extra_package), app.getPackagename());
        if (identity.trim().equals(app.getPackagename())) {
          result.put(resources.getString(R.string.intent_extra_not_violated), false);
          result.put(resources.getString(R.string.intent_extra_package), app.getPackagename());
        } else {
          result.put(resources.getString(R.string.intent_extra_not_violated), true);
        }

      } catch (JSONException e) {
        Log.e(TAG, "Invalid JSON format." + e);
      }
      appList.put(result);
    }

    resultBuilder.build(code, appList);
  }
Ejemplo n.º 3
0
 /**
  * Produce a JSONArray of strings from a row of comma delimited values.
  * @param x A JSONTokener of the source text.
  * @return A JSONArray of strings.
  * @throws JSONException
  */
 public static JSONArray rowToJSONArray(JSONTokener x) throws JSONException {
     JSONArray ja = new JSONArray();
     for (;;) {
         String value = getValue(x);
         char c = x.next();
         if (value == null || 
         		(ja.length() == 0 && value.length() == 0 && c != ',')) {
             return null;
         }
         ja.put(value);
         for (;;) {                
             if (c == ',') {
                 break;
             }
             if (c != ' ') {
                 if (c == '\n' || c == '\r' || c == 0) {
                     return ja;
                 }
                 throw x.syntaxError("Bad character '" + c + "' (" +
                         (int)c + ").");
             }
             c = x.next();
         }
     }
 }
Ejemplo n.º 4
0
 /**
  * Produce a JSONArray containing the names of the elements of this JSONObject.
  *
  * @return A JSONArray containing the key strings, or null if the JSONObject is empty.
  */
 public JSONArray names() {
   JSONArray ja = new JSONArray();
   Iterator keys = keys();
   while (keys.hasNext()) {
     ja.put(keys.next());
   }
   return ja.length() == 0 ? null : ja;
 }
Ejemplo n.º 5
0
 /**
  * Produce a JSONArray containing the names of the elements of this JSONObject.
  *
  * @return A JSONArray containing the key strings, or null if the JSONObject is empty.
  */
 public JSONArray names() {
   JSONArray ja = new JSONArray();
   Enumeration keys = keys();
   while (keys.hasMoreElements()) {
     ja.put(keys.nextElement());
   }
   return ja.length() == 0 ? null : ja;
 }
Ejemplo n.º 6
0
 /**
  * Produce a JSONArray containing the values of the members of this JSONObject.
  *
  * @param names A JSONArray containing a list of key strings. This determines the sequence of the
  *     values in the result.
  * @return A JSONArray of values.
  * @throws JSONException If any of the values are non-finite numbers.
  */
 public JSONArray toJSONArray(JSONArray names) throws JSONException {
   if (names == null || names.length() == 0) {
     return null;
   }
   JSONArray ja = new JSONArray();
   for (int i = 0; i < names.length(); i += 1) {
     ja.put(this.opt(names.getString(i)));
   }
   return ja;
 }
 /**
  * Serializa el bean en formato JSON
  *
  * @param json objeto donde se escribirá el bean en formato JSON
  * @throws es.tid.serial.json.JSONException Cuando se produce un error en la serialización del
  *     bean
  */
 public void toJSON(JSONObject json) throws JSONException {
   JSONObject jObject;
   JSONArray jArray;
   JSONArray jObjectArray;
   jObjectArray = new JSONArray();
   for (int i = 0; i < literalProperties_size(); i++) {
     JSONObject jObj_i = new JSONObject();
     this.getLiteralProperties(i).toJSON(jObj_i);
     jObjectArray.put(jObj_i);
   }
   json.put("literalProperties", jObjectArray);
   jObjectArray = new JSONArray();
   for (int i = 0; i < objectProperties_size(); i++) {
     JSONObject jObj_i = new JSONObject();
     this.getObjectProperties(i).toJSON(jObj_i);
     jObjectArray.put(jObj_i);
   }
   json.put("objectProperties", jObjectArray);
 }
Ejemplo n.º 8
0
 /**
  * Accumulate values under a key. It is similar to the put method except that if there is already
  * an object stored under the key then a JSONArray is stored under the key to hold all of the
  * accumulated values. If there is already a JSONArray, then the new value is appended to it. In
  * contrast, the put method replaces the previous value.
  *
  * @param key A key string.
  * @param value An object to be accumulated under the key.
  * @return this.
  * @throws JSONException If the value is an invalid number or if the key is null.
  */
 public JSONObject accumulate(String key, Object value) throws JSONException {
   testValidity(value);
   Object o = opt(key);
   if (o == null) {
     put(key, value instanceof JSONArray ? new JSONArray().put(value) : value);
   } else if (o instanceof JSONArray) {
     ((JSONArray) o).put(value);
   } else {
     put(key, new JSONArray().put(o).put(value));
   }
   return this;
 }
  /**
   * Reads a sequence of values and the trailing closing brace ']' of an array. The opening brace
   * '[' should have already been read. Note that "[]" yields an empty array, but "[,]" returns a
   * two-element array equivalent to "[null,null]".
   */
  private JSONArray readArray() throws JSONException {
    JSONArray result = new JSONArray();

    /* to cover input that ends with ",]". */
    boolean hasTrailingSeparator = false;

    while (true) {
      switch (nextCleanInternal()) {
        case -1:
          throw syntaxError("Unterminated array");
        case ']':
          if (hasTrailingSeparator) {
            result.put(null);
          }
          return result;
        case ',':
        case ';':
          /* A separator without a value first means "null". */
          result.put(null);
          hasTrailingSeparator = true;
          continue;
        default:
          pos--;
      }

      result.put(nextValue());

      switch (nextCleanInternal()) {
        case ']':
          return result;
        case ',':
        case ';':
          hasTrailingSeparator = true;
          continue;
        default:
          throw syntaxError("Unterminated array");
      }
    }
  }
Ejemplo n.º 10
0
 /**
  * Produce a JSONArray of JSONObjects from a comma delimited text string using a supplied
  * JSONArray as the source of element names.
  *
  * @param names A JSONArray of strings.
  * @param x A JSONTokener of the source text.
  * @return A JSONArray of JSONObjects.
  * @throws JSONException
  */
 public static JSONArray toJSONArray(JSONArray names, JSONTokener x) throws JSONException {
   if (names == null || names.length() == 0) {
     return null;
   }
   JSONArray ja = new JSONArray();
   for (; ; ) {
     JSONObject jo = rowToJSONObject(names, x);
     if (jo == null) {
       break;
     }
     ja.put(jo);
   }
   if (ja.length() == 0) {
     return null;
   }
   return ja;
 }
Ejemplo n.º 11
0
  /**
   * Retrieve device application information.
   *
   * @param code - Operation code.
   */
  public void getApplicationList(String code) {
    ArrayList<DeviceAppInfo> apps = appList.getInstalledApps();

    JSONArray result = new JSONArray();
    int size = apps.size();

    for (int i = 0; i < size; i++) {
      JSONObject app = new JSONObject();
      try {
        app.put(APP_INFO_TAG_NAME, Uri.encode(apps.get(i).getAppname()));
        app.put(APP_INFO_TAG_PACKAGE, apps.get(i).getPackagename());
        app.put(APP_INFO_TAG_ICON, apps.get(i).getIcon());
        result.put(app);
      } catch (JSONException e) {
        Log.e(TAG, "Invalid JSON format." + e);
      }
    }

    resultBuilder.build(code, result);
  }
Ejemplo n.º 12
0
  /**
   * Parse XML values and store them in a JSONArray.
   *
   * @param x The XMLTokener containing the source string.
   * @param arrayForm true if array form, false if object form.
   * @param ja The JSONArray that is containing the current tag or null if we are at the outermost
   *     level.
   * @return A JSONArray if the value is the outermost tag, otherwise null.
   * @throws JSONException
   */
  private static Object parse(XMLTokener x, boolean arrayForm, JSONArray ja) throws JSONException {
    String attribute;
    char c;
    String closeTag = null;
    int i;
    JSONArray newja = null;
    JSONObject newjo = null;
    Object token;
    String tagName = null;

    // Test for and skip past these forms:
    //      <!-- ... -->
    //      <![  ... ]]>
    //      <!   ...   >
    //      <?   ...  ?>

    while (true) {
      if (!x.more()) {
        throw x.syntaxError("Bad XML");
      }
      token = x.nextContent();
      if (token == XML.LT) {
        token = x.nextToken();
        if (token instanceof Character) {
          if (token == XML.SLASH) {

            // Close tag </

            token = x.nextToken();
            if (!(token instanceof String)) {
              throw new JSONException("Expected a closing name instead of '" + token + "'.");
            }
            if (x.nextToken() != XML.GT) {
              throw x.syntaxError("Misshaped close tag");
            }
            return token;
          } else if (token == XML.BANG) {

            // <!

            c = x.next();
            if (c == '-') {
              if (x.next() == '-') {
                x.skipPast("-->");
              } else {
                x.back();
              }
            } else if (c == '[') {
              token = x.nextToken();
              if (token.equals("CDATA") && x.next() == '[') {
                if (ja != null) {
                  ja.put(x.nextCDATA());
                }
              } else {
                throw x.syntaxError("Expected 'CDATA['");
              }
            } else {
              i = 1;
              do {
                token = x.nextMeta();
                if (token == null) {
                  throw x.syntaxError("Missing '>' after '<!'.");
                } else if (token == XML.LT) {
                  i += 1;
                } else if (token == XML.GT) {
                  i -= 1;
                }
              } while (i > 0);
            }
          } else if (token == XML.QUEST) {

            // <?

            x.skipPast("?>");
          } else {
            throw x.syntaxError("Misshaped tag");
          }

          // Open tag <

        } else {
          if (!(token instanceof String)) {
            throw x.syntaxError("Bad tagName '" + token + "'.");
          }
          tagName = (String) token;
          newja = new JSONArray();
          newjo = new JSONObject();
          if (arrayForm) {
            newja.put(tagName);
            if (ja != null) {
              ja.put(newja);
            }
          } else {
            newjo.put("tagName", tagName);
            if (ja != null) {
              ja.put(newjo);
            }
          }
          token = null;
          for (; ; ) {
            if (token == null) {
              token = x.nextToken();
            }
            if (token == null) {
              throw x.syntaxError("Misshaped tag");
            }
            if (!(token instanceof String)) {
              break;
            }

            // attribute = value

            attribute = (String) token;
            if (!arrayForm && ("tagName".equals(attribute) || "childNode".equals(attribute))) {
              throw x.syntaxError("Reserved attribute.");
            }
            token = x.nextToken();
            if (token == XML.EQ) {
              token = x.nextToken();
              if (!(token instanceof String)) {
                throw x.syntaxError("Missing value");
              }
              newjo.accumulate(attribute, XML.stringToValue((String) token));
              token = null;
            } else {
              newjo.accumulate(attribute, "");
            }
          }
          if (arrayForm && newjo.length() > 0) {
            newja.put(newjo);
          }

          // Empty tag <.../>

          if (token == XML.SLASH) {
            if (x.nextToken() != XML.GT) {
              throw x.syntaxError("Misshaped tag");
            }
            if (ja == null) {
              if (arrayForm) {
                return newja;
              } else {
                return newjo;
              }
            }

            // Content, between <...> and </...>

          } else {
            if (token != XML.GT) {
              throw x.syntaxError("Misshaped tag");
            }
            closeTag = (String) parse(x, arrayForm, newja);
            if (closeTag != null) {
              if (!closeTag.equals(tagName)) {
                throw x.syntaxError("Mismatched '" + tagName + "' and '" + closeTag + "'");
              }
              tagName = null;
              if (!arrayForm && newja.length() > 0) {
                newjo.put("childNodes", newja);
              }
              if (ja == null) {
                if (arrayForm) {
                  return newja;
                } else {
                  return newjo;
                }
              }
            }
          }
        }
      } else {
        if (ja != null) {
          ja.put(token instanceof String ? XML.stringToValue((String) token) : token);
        }
      }
    }
  }
  private JSONArray getClassProperties(Class<?> clazz, int level) throws IntrospectionException {
    JSONArray arr = new JSONArray();
    TypeDiscoverer td = new TypeDiscoverer();
    try {
      for (PropertyDescriptor pd : Introspector.getBeanInfo(clazz).getPropertyDescriptors()) {
        Method readMethod = pd.getReadMethod();
        if (readMethod != null) {
          if (readMethod.getDeclaringClass() == java.lang.Enum.class) {
            // skip getDeclaringClass
            continue;
          } else if ("class".equals(pd.getName())) {
            // skip getClass
            continue;
          }
        } else {
          // yields com.datatorrent.api.Context on JDK6 and
          // com.datatorrent.api.Context.OperatorContext with JDK7
          if ("up".equals(pd.getName())
              && com.datatorrent.api.Context.class.isAssignableFrom(pd.getPropertyType())) {
            continue;
          }
        }
        // LOG.info("name: " + pd.getName() + " type: " + pd.getPropertyType());

        Class<?> propertyType = pd.getPropertyType();
        if (propertyType != null) {
          JSONObject propertyObj = new JSONObject();
          propertyObj.put("name", pd.getName());
          propertyObj.put("canGet", readMethod != null);
          propertyObj.put("canSet", pd.getWriteMethod() != null);
          if (readMethod != null) {
            for (Class<?> c = clazz; c != null; c = c.getSuperclass()) {
              OperatorClassInfo oci = classInfo.get(c.getName());
              if (oci != null) {
                MethodInfo getMethodInfo = oci.getMethods.get(readMethod.getName());
                if (getMethodInfo != null) {
                  addTagsToProperties(getMethodInfo, propertyObj);
                  break;
                }
              }
            }
            // type can be a type symbol or parameterized type
            td.setTypeArguments(clazz, readMethod.getGenericReturnType(), propertyObj);
          } else {
            if (pd.getWriteMethod() != null) {
              td.setTypeArguments(
                  clazz, pd.getWriteMethod().getGenericParameterTypes()[0], propertyObj);
            }
          }
          // if (!propertyType.isPrimitive() && !propertyType.isEnum() && !propertyType.isArray() &&
          // !propertyType.getName().startsWith("java.lang") && level < MAX_PROPERTY_LEVELS) {
          //  propertyObj.put("properties", getClassProperties(propertyType, level + 1));
          // }
          arr.put(propertyObj);
        }
      }
    } catch (JSONException ex) {
      throw new RuntimeException(ex);
    }
    return arr;
  }
  public JSONObject describeOperator(String clazz) throws Exception {
    TypeGraphVertex tgv = typeGraph.getTypeGraphVertex(clazz);
    if (tgv.isInstantiable()) {
      JSONObject response = new JSONObject();
      JSONArray inputPorts = new JSONArray();
      JSONArray outputPorts = new JSONArray();
      // Get properties from ASM

      JSONObject operatorDescriptor = describeClassByASM(clazz);
      JSONArray properties = operatorDescriptor.getJSONArray("properties");

      properties = enrichProperties(clazz, properties);

      JSONArray portTypeInfo = operatorDescriptor.getJSONArray("portTypeInfo");

      List<CompactFieldNode> inputPortfields = typeGraph.getAllInputPorts(clazz);
      List<CompactFieldNode> outputPortfields = typeGraph.getAllOutputPorts(clazz);

      try {
        for (CompactFieldNode field : inputPortfields) {
          JSONObject inputPort = setFieldAttributes(clazz, field);
          if (!inputPort.has("optional")) {
            inputPort.put(
                "optional",
                false); // input port that is not annotated is default to be not optional
          }
          if (!inputPort.has(SCHEMA_REQUIRED_KEY)) {
            inputPort.put(SCHEMA_REQUIRED_KEY, false);
          }
          inputPorts.put(inputPort);
        }

        for (CompactFieldNode field : outputPortfields) {
          JSONObject outputPort = setFieldAttributes(clazz, field);

          if (!outputPort.has("optional")) {
            outputPort.put(
                "optional", true); // output port that is not annotated is default to be optional
          }
          if (!outputPort.has("error")) {
            outputPort.put("error", false);
          }
          if (!outputPort.has(SCHEMA_REQUIRED_KEY)) {
            outputPort.put(SCHEMA_REQUIRED_KEY, false);
          }
          outputPorts.put(outputPort);
        }

        response.put("name", clazz);
        response.put("properties", properties);
        response.put(PORT_TYPE_INFO_KEY, portTypeInfo);
        response.put("inputPorts", inputPorts);
        response.put("outputPorts", outputPorts);

        OperatorClassInfo oci = classInfo.get(clazz);

        if (oci != null) {
          if (oci.comment != null) {
            String[] descriptions;
            // first look for a <p> tag
            String keptPrefix = "<p>";
            descriptions = oci.comment.split("<p>", 2);
            if (descriptions.length == 0) {
              keptPrefix = "";
              // if no <p> tag, then look for a blank line
              descriptions = oci.comment.split("\n\n", 2);
            }
            if (descriptions.length > 0) {
              response.put("shortDesc", descriptions[0]);
            }
            if (descriptions.length > 1) {
              response.put("longDesc", keptPrefix + descriptions[1]);
            }
          }
          response.put("category", oci.tags.get("@category"));
          String displayName = oci.tags.get("@displayName");
          if (displayName == null) {
            displayName = decamelizeClassName(ClassUtils.getShortClassName(clazz));
          }
          response.put("displayName", displayName);
          String tags = oci.tags.get("@tags");
          if (tags != null) {
            JSONArray tagArray = new JSONArray();
            for (String tag : StringUtils.split(tags, ',')) {
              tagArray.put(tag.trim().toLowerCase());
            }
            response.put("tags", tagArray);
          }
          String doclink = oci.tags.get("@doclink");
          if (doclink != null) {
            response.put("doclink", doclink + "?" + getDocName(clazz));
          } else if (clazz.startsWith("com.datatorrent.lib.")
              || clazz.startsWith("com.datatorrent.contrib.")) {
            response.put("doclink", DT_OPERATOR_DOCLINK_PREFIX + "?" + getDocName(clazz));
          }
        }
      } catch (JSONException ex) {
        throw new RuntimeException(ex);
      }
      return response;
    } else {
      throw new UnsupportedOperationException();
    }
  }
Ejemplo n.º 15
0
  /**
   * Entry point.
   *
   * @param args
   */
  public static void main(String args[]) {
    Iterator it;
    JSONArray a;
    JSONObject j;
    JSONStringer jj;
    String s;

    /**
     * Obj is a typical class that implements JSONString. It also provides some beanie methods that
     * can be used to construct a JSONObject. It also demonstrates constructing a JSONObject with an
     * array of names.
     */
    class Obj implements JSONString {
      public String aString;
      public double aNumber;
      public boolean aBoolean;

      public Obj(String string, double n, boolean b) {
        this.aString = string;
        this.aNumber = n;
        this.aBoolean = b;
      }

      public double getNumber() {
        return this.aNumber;
      }

      public String getString() {
        return this.aString;
      }

      public boolean isBoolean() {
        return this.aBoolean;
      }

      public String getBENT() {
        return "All uppercase key";
      }

      public String getX() {
        return "x";
      }

      public String toJSONString() {
        return "{"
            + JSONObject.quote(this.aString)
            + ":"
            + JSONObject.doubleToString(this.aNumber)
            + "}";
      }

      public String toString() {
        return this.getString()
            + " "
            + this.getNumber()
            + " "
            + this.isBoolean()
            + "."
            + this.getBENT()
            + " "
            + this.getX();
      }
    }

    Obj obj = new Obj("A beany object", 42, true);

    try {
      j =
          XML.toJSONObject(
              "<![CDATA[This is a collection of test patterns and examples for org.json.]]>  Ignore the stuff past the end.  ");
      System.out.println(j.toString());

      s = "{     \"list of lists\" : [         [1, 2, 3],         [4, 5, 6],     ] }";
      j = new JSONObject(s);
      System.out.println(j.toString(4));
      System.out.println(XML.toString(j));

      s =
          "<recipe name=\"bread\" prep_time=\"5 mins\" cook_time=\"3 hours\"> <title>Basic bread</title> <ingredient amount=\"8\" unit=\"dL\">Flour</ingredient> <ingredient amount=\"10\" unit=\"grams\">Yeast</ingredient> <ingredient amount=\"4\" unit=\"dL\" state=\"warm\">Water</ingredient> <ingredient amount=\"1\" unit=\"teaspoon\">Salt</ingredient> <instructions> <step>Mix all ingredients together.</step> <step>Knead thoroughly.</step> <step>Cover with a cloth, and leave for one hour in warm room.</step> <step>Knead again.</step> <step>Place in a bread baking tin.</step> <step>Cover with a cloth, and leave for one hour in warm room.</step> <step>Bake in the oven at 180(degrees)C for 30 minutes.</step> </instructions> </recipe> ";
      j = XML.toJSONObject(s);
      System.out.println(j.toString(4));
      System.out.println();

      j = JSONML.toJSONObject(s);
      System.out.println(j.toString());
      System.out.println(JSONML.toString(j));
      System.out.println();

      a = JSONML.toJSONArray(s);
      System.out.println(a.toString(4));
      System.out.println(JSONML.toString(a));
      System.out.println();

      s =
          "<div id=\"demo\" class=\"JSONML\"><p>JSONML is a transformation between <b>JSON</b> and <b>XML</b> that preserves ordering of document features.</p><p>JSONML can work with JSON arrays or JSON objects.</p><p>Three<br/>little<br/>words</p></div>";
      j = JSONML.toJSONObject(s);
      System.out.println(j.toString(4));
      System.out.println(JSONML.toString(j));
      System.out.println();

      a = JSONML.toJSONArray(s);
      System.out.println(a.toString(4));
      System.out.println(JSONML.toString(a));
      System.out.println();

      s =
          "<person created=\"2006-11-11T19:23\" modified=\"2006-12-31T23:59\">\n <firstName>Robert</firstName>\n <lastName>Smith</lastName>\n <address type=\"home\">\n <street>12345 Sixth Ave</street>\n <city>Anytown</city>\n <state>CA</state>\n <postalCode>98765-4321</postalCode>\n </address>\n </person>";
      j = XML.toJSONObject(s);
      System.out.println(j.toString(4));

      j = new JSONObject(obj);
      System.out.println(j.toString());

      s =
          "{ \"entity\": { \"imageURL\": \"\", \"name\": \"IXXXXXXXXXXXXX\", \"id\": 12336, \"ratingCount\": null, \"averageRating\": null } }";
      j = new JSONObject(s);
      System.out.println(j.toString(2));

      jj = new JSONStringer();
      s =
          jj.object()
              .key("single")
              .value("MARIE HAA'S")
              .key("Johnny")
              .value("MARIE HAA\\'S")
              .key("foo")
              .value("bar")
              .key("baz")
              .array()
              .object()
              .key("quux")
              .value("Thanks, Josh!")
              .endObject()
              .endArray()
              .key("obj keys")
              .value(JSONObject.getNames(obj))
              .endObject()
              .toString();
      System.out.println(s);

      System.out.println(
          new JSONStringer()
              .object()
              .key("a")
              .array()
              .array()
              .array()
              .value("b")
              .endArray()
              .endArray()
              .endArray()
              .endObject()
              .toString());

      jj = new JSONStringer();
      jj.array();
      jj.value(1);
      jj.array();
      jj.value(null);
      jj.array();
      jj.object();
      jj.key("empty-array").array().endArray();
      jj.key("answer").value(42);
      jj.key("null").value(null);
      jj.key("false").value(false);
      jj.key("true").value(true);
      jj.key("big").value(123456789e+88);
      jj.key("small").value(123456789e-88);
      jj.key("empty-object").object().endObject();
      jj.key("long");
      jj.value(9223372036854775807L);
      jj.endObject();
      jj.value("two");
      jj.endArray();
      jj.value(true);
      jj.endArray();
      jj.value(98.6);
      jj.value(-100.0);
      jj.object();
      jj.endObject();
      jj.object();
      jj.key("one");
      jj.value(1.00);
      jj.endObject();
      jj.value(obj);
      jj.endArray();
      System.out.println(jj.toString());

      System.out.println(new JSONArray(jj.toString()).toString(4));

      int ar[] = {1, 2, 3};
      JSONArray ja = new JSONArray(ar);
      System.out.println(ja.toString());

      String sa[] = {"aString", "aNumber", "aBoolean"};
      j = new JSONObject(obj, sa);
      j.put("Testing JSONString interface", obj);
      System.out.println(j.toString(4));

      j =
          new JSONObject(
              "{slashes: '///', closetag: '</script>', backslash:'\\\\', ei: {quotes: '\"\\''},eo: {a: '\"quoted\"', b:\"don't\"}, quotes: [\"'\", '\"']}");
      System.out.println(j.toString(2));
      System.out.println(XML.toString(j));
      System.out.println("");

      j =
          new JSONObject(
              "{foo: [true, false,9876543210,    0.0, 1.00000001,  1.000000000001, 1.00000000000000001,"
                  + " .00000000000000001, 2.00, 0.1, 2e100, -32,[],{}, \"string\"], "
                  + "  to   : null, op : 'Good',"
                  + "ten:10} postfix comment");
      j.put("String", "98.6");
      j.put("JSONObject", new JSONObject());
      j.put("JSONArray", new JSONArray());
      j.put("int", 57);
      j.put("double", 123456789012345678901234567890.);
      j.put("true", true);
      j.put("false", false);
      j.put("null", JSONObject.NULL);
      j.put("bool", "true");
      j.put("zero", -0.0);
      j.put("\\u2028", "\u2028");
      j.put("\\u2029", "\u2029");
      a = j.getJSONArray("foo");
      a.put(666);
      a.put(2001.99);
      a.put("so \"fine\".");
      a.put("so <fine>.");
      a.put(true);
      a.put(false);
      a.put(new JSONArray());
      a.put(new JSONObject());
      j.put("keys", JSONObject.getNames(j));
      System.out.println(j.toString(4));
      System.out.println(XML.toString(j));

      System.out.println("String: " + j.getDouble("String"));
      System.out.println("  bool: " + j.getBoolean("bool"));
      System.out.println("    to: " + j.getString("to"));
      System.out.println("  true: " + j.getString("true"));
      System.out.println("   foo: " + j.getJSONArray("foo"));
      System.out.println("    op: " + j.getString("op"));
      System.out.println("   ten: " + j.getInt("ten"));
      System.out.println("  oops: " + j.optBoolean("oops"));

      s =
          "<xml one = 1 two=' \"2\" '><five></five>First \u0009&lt;content&gt;<five></five> This is \"content\". <three>  3  </three>JSON does not preserve the sequencing of elements and contents.<three>  III  </three>  <three>  T H R E E</three><four/>Content text is an implied structure in XML. <six content=\"6\"/>JSON does not have implied structure:<seven>7</seven>everything is explicit.<![CDATA[CDATA blocks<are><supported>!]]></xml>";
      j = XML.toJSONObject(s);
      System.out.println(j.toString(2));
      System.out.println(XML.toString(j));
      System.out.println("");

      ja = JSONML.toJSONArray(s);
      System.out.println(ja.toString(4));
      System.out.println(JSONML.toString(ja));
      System.out.println("");

      s =
          "<xml do='0'>uno<a re='1' mi='2'>dos<b fa='3'/>tres<c>true</c>quatro</a>cinqo<d>seis<e/></d></xml>";
      ja = JSONML.toJSONArray(s);
      System.out.println(ja.toString(4));
      System.out.println(JSONML.toString(ja));
      System.out.println("");

      s =
          "<mapping><empty/>   <class name = \"Customer\">      <field name = \"ID\" type = \"string\">         <bind-xml name=\"ID\" node=\"attribute\"/>      </field>      <field name = \"FirstName\" type = \"FirstName\"/>      <field name = \"MI\" type = \"MI\"/>      <field name = \"LastName\" type = \"LastName\"/>   </class>   <class name = \"FirstName\">      <field name = \"text\">         <bind-xml name = \"text\" node = \"text\"/>      </field>   </class>   <class name = \"MI\">      <field name = \"text\">         <bind-xml name = \"text\" node = \"text\"/>      </field>   </class>   <class name = \"LastName\">      <field name = \"text\">         <bind-xml name = \"text\" node = \"text\"/>      </field>   </class></mapping>";
      j = XML.toJSONObject(s);

      System.out.println(j.toString(2));
      System.out.println(XML.toString(j));
      System.out.println("");
      ja = JSONML.toJSONArray(s);
      System.out.println(ja.toString(4));
      System.out.println(JSONML.toString(ja));
      System.out.println("");

      j =
          XML.toJSONObject(
              "<?xml version=\"1.0\" ?><Book Author=\"Anonymous\"><Title>Sample Book</Title><Chapter id=\"1\">This is chapter 1. It is not very long or interesting.</Chapter><Chapter id=\"2\">This is chapter 2. Although it is longer than chapter 1, it is not any more interesting.</Chapter></Book>");
      System.out.println(j.toString(2));
      System.out.println(XML.toString(j));
      System.out.println("");

      j =
          XML.toJSONObject(
              "<!DOCTYPE bCard 'http://www.cs.caltech.edu/~adam/schemas/bCard'><bCard><?xml default bCard        firstname = ''        lastname  = '' company   = '' email = '' homepage  = ''?><bCard        firstname = 'Rohit'        lastname  = 'Khare'        company   = 'MCI'        email     = '*****@*****.**'        homepage  = 'http://pest.w3.org/'/><bCard        firstname = 'Adam'        lastname  = 'Rifkin'        company   = 'Caltech Infospheres Project'        email     = '*****@*****.**'        homepage  = 'http://www.cs.caltech.edu/~adam/'/></bCard>");
      System.out.println(j.toString(2));
      System.out.println(XML.toString(j));
      System.out.println("");

      j =
          XML.toJSONObject(
              "<?xml version=\"1.0\"?><customer>    <firstName>        <text>Fred</text>    </firstName>    <ID>fbs0001</ID>    <lastName> <text>Scerbo</text>    </lastName>    <MI>        <text>B</text>    </MI></customer>");
      System.out.println(j.toString(2));
      System.out.println(XML.toString(j));
      System.out.println("");

      j =
          XML.toJSONObject(
              "<!ENTITY tp-address PUBLIC '-//ABC University::Special Collections Library//TEXT (titlepage: name and address)//EN' 'tpspcoll.sgm'><list type='simple'><head>Repository Address </head><item>Special Collections Library</item><item>ABC University</item><item>Main Library, 40 Circle Drive</item><item>Ourtown, Pennsylvania</item><item>17654 USA</item></list>");
      System.out.println(j.toString());
      System.out.println(XML.toString(j));
      System.out.println("");

      j =
          XML.toJSONObject(
              "<test intertag status=ok><empty/>deluxe<blip sweet=true>&amp;&quot;toot&quot;&toot;&#x41;</blip><x>eks</x><w>bonus</w><w>bonus2</w></test>");
      System.out.println(j.toString(2));
      System.out.println(XML.toString(j));
      System.out.println("");

      j =
          HTTP.toJSONObject(
              "GET / HTTP/1.0\nAccept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*\nAccept-Language: en-us\nUser-Agent: Mozilla/4.0 (compatible; MSIE 5.5; Windows 98; Win 9x 4.90; T312461; Q312461)\nHost: www.nokko.com\nConnection: keep-alive\nAccept-encoding: gzip, deflate\n");
      System.out.println(j.toString(2));
      System.out.println(HTTP.toString(j));
      System.out.println("");

      j =
          HTTP.toJSONObject(
              "HTTP/1.1 200 Oki Doki\nDate: Sun, 26 May 2002 17:38:52 GMT\nServer: Apache/1.3.23 (Unix) mod_perl/1.26\nKeep-Alive: timeout=15, max=100\nConnection: Keep-Alive\nTransfer-Encoding: chunked\nContent-Type: text/html\n");
      System.out.println(j.toString(2));
      System.out.println(HTTP.toString(j));
      System.out.println("");

      j =
          new JSONObject(
              "{nix: null, nux: false, null: 'null', 'Request-URI': '/', Method: 'GET', 'HTTP-Version': 'HTTP/1.0'}");
      System.out.println(j.toString(2));
      System.out.println("isNull: " + j.isNull("nix"));
      System.out.println("   has: " + j.has("nix"));
      System.out.println(XML.toString(j));
      System.out.println(HTTP.toString(j));
      System.out.println("");

      j =
          XML.toJSONObject(
              "<?xml version='1.0' encoding='UTF-8'?>"
                  + "\n\n"
                  + "<SOAP-ENV:Envelope"
                  + " xmlns:SOAP-ENV=\"http://schemas.xmlsoap.org/soap/envelope/\""
                  + " xmlns:xsi=\"http://www.w3.org/1999/XMLSchema-instance\""
                  + " xmlns:xsd=\"http://www.w3.org/1999/XMLSchema\">"
                  + "<SOAP-ENV:Body><ns1:doGoogleSearch"
                  + " xmlns:ns1=\"urn:GoogleSearch\""
                  + " SOAP-ENV:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\">"
                  + "<key xsi:type=\"xsd:string\">GOOGLEKEY</key> <q"
                  + " xsi:type=\"xsd:string\">'+search+'</q> <start"
                  + " xsi:type=\"xsd:int\">0</start> <maxResults"
                  + " xsi:type=\"xsd:int\">10</maxResults> <filter"
                  + " xsi:type=\"xsd:boolean\">true</filter> <restrict"
                  + " xsi:type=\"xsd:string\"></restrict> <safeSearch"
                  + " xsi:type=\"xsd:boolean\">false</safeSearch> <lr"
                  + " xsi:type=\"xsd:string\"></lr> <ie"
                  + " xsi:type=\"xsd:string\">latin1</ie> <oe"
                  + " xsi:type=\"xsd:string\">latin1</oe>"
                  + "</ns1:doGoogleSearch>"
                  + "</SOAP-ENV:Body></SOAP-ENV:Envelope>");
      System.out.println(j.toString(2));
      System.out.println(XML.toString(j));
      System.out.println("");

      j =
          new JSONObject(
              "{Envelope: {Body: {\"ns1:doGoogleSearch\": {oe: \"latin1\", filter: true, q: \"'+search+'\", key: \"GOOGLEKEY\", maxResults: 10, \"SOAP-ENV:encodingStyle\": \"http://schemas.xmlsoap.org/soap/encoding/\", start: 0, ie: \"latin1\", safeSearch:false, \"xmlns:ns1\": \"urn:GoogleSearch\"}}}}");
      System.out.println(j.toString(2));
      System.out.println(XML.toString(j));
      System.out.println("");

      j = CookieList.toJSONObject("  f%oo = b+l=ah  ; o;n%40e = t.wo ");
      System.out.println(j.toString(2));
      System.out.println(CookieList.toString(j));
      System.out.println("");

      j = Cookie.toJSONObject("f%oo=blah; secure ;expires = April 24, 2002");
      System.out.println(j.toString(2));
      System.out.println(Cookie.toString(j));
      System.out.println("");

      j =
          new JSONObject(
              "{script: 'It is not allowed in HTML to send a close script tag in a string<script>because it confuses browsers</script>so we insert a backslash before the /'}");
      System.out.println(j.toString());
      System.out.println("");

      JSONTokener jt =
          new JSONTokener("{op:'test', to:'session', pre:1}{op:'test', to:'session', pre:2}");
      j = new JSONObject(jt);
      System.out.println(j.toString());
      System.out.println("pre: " + j.optInt("pre"));
      int i = jt.skipTo('{');
      System.out.println(i);
      j = new JSONObject(jt);
      System.out.println(j.toString());
      System.out.println("");

      a =
          CDL.toJSONArray(
              "Comma delimited list test, '\"Strip\"Quotes', 'quote, comma', No quotes, 'Single Quotes', \"Double Quotes\"\n1,'2',\"3\"\n,'It is \"good,\"', \"It works.\"\n\n");

      s = CDL.toString(a);
      System.out.println(s);
      System.out.println("");
      System.out.println(a.toString(4));
      System.out.println("");
      a = CDL.toJSONArray(s);
      System.out.println(a.toString(4));
      System.out.println("");

      a = new JSONArray(" [\"<escape>\", next is an implied null , , ok,] ");
      System.out.println(a.toString());
      System.out.println("");
      System.out.println(XML.toString(a));
      System.out.println("");

      j =
          new JSONObject(
              "{ fun => with non-standard forms ; forgiving => This package can be used to parse formats that are similar to but not stricting conforming to JSON; why=To make it easier to migrate existing data to JSON,one = [[1.00]]; uno=[[{1=>1}]];'+':+6e66 ;pluses=+++;empty = '' , 'double':0.666,true: TRUE, false: FALSE, null=NULL;[true] = [[!,@;*]]; string=>  o. k. ; \r oct=0666; hex=0x666; dec=666; o=0999; noh=0x0x}");
      System.out.println(j.toString(4));
      System.out.println("");
      if (j.getBoolean("true") && !j.getBoolean("false")) {
        System.out.println("It's all good");
      }

      System.out.println("");
      j = new JSONObject(j, new String[] {"dec", "oct", "hex", "missing"});
      System.out.println(j.toString(4));

      System.out.println("");
      System.out.println(new JSONStringer().array().value(a).value(j).endArray());

      j =
          new JSONObject(
              "{string: \"98.6\", long: 2147483648, int: 2147483647, longer: 9223372036854775807, double: 9223372036854775808}");
      System.out.println(j.toString(4));

      System.out.println("\ngetInt");
      System.out.println("int    " + j.getInt("int"));
      System.out.println("long   " + j.getInt("long"));
      System.out.println("longer " + j.getInt("longer"));
      System.out.println("double " + j.getInt("double"));
      System.out.println("string " + j.getInt("string"));

      System.out.println("\ngetLong");
      System.out.println("int    " + j.getLong("int"));
      System.out.println("long   " + j.getLong("long"));
      System.out.println("longer " + j.getLong("longer"));
      System.out.println("double " + j.getLong("double"));
      System.out.println("string " + j.getLong("string"));

      System.out.println("\ngetDouble");
      System.out.println("int    " + j.getDouble("int"));
      System.out.println("long   " + j.getDouble("long"));
      System.out.println("longer " + j.getDouble("longer"));
      System.out.println("double " + j.getDouble("double"));
      System.out.println("string " + j.getDouble("string"));

      j.put("good sized", 9223372036854775807L);
      System.out.println(j.toString(4));

      a = new JSONArray("[2147483647, 2147483648, 9223372036854775807, 9223372036854775808]");
      System.out.println(a.toString(4));

      System.out.println("\nKeys: ");
      it = j.keys();
      while (it.hasNext()) {
        s = (String) it.next();
        System.out.println(s + ": " + j.getString(s));
      }

      System.out.println("\naccumulate: ");
      j = new JSONObject();
      j.accumulate("stooge", "Curly");
      j.accumulate("stooge", "Larry");
      j.accumulate("stooge", "Moe");
      a = j.getJSONArray("stooge");
      a.put(5, "Shemp");
      System.out.println(j.toString(4));

      System.out.println("\nwrite:");
      System.out.println(j.write(new StringWriter()));

      s = "<xml empty><a></a><a>1</a><a>22</a><a>333</a></xml>";
      j = XML.toJSONObject(s);
      System.out.println(j.toString(4));
      System.out.println(XML.toString(j));

      s =
          "<book><chapter>Content of the first chapter</chapter><chapter>Content of the second chapter      <chapter>Content of the first subchapter</chapter>      <chapter>Content of the second subchapter</chapter></chapter><chapter>Third Chapter</chapter></book>";
      j = XML.toJSONObject(s);
      System.out.println(j.toString(4));
      System.out.println(XML.toString(j));

      a = JSONML.toJSONArray(s);
      System.out.println(a.toString(4));
      System.out.println(JSONML.toString(a));

      Collection c = null;
      Map m = null;

      j = new JSONObject(m);
      a = new JSONArray(c);
      j.append("stooge", "Joe DeRita");
      j.append("stooge", "Shemp");
      j.accumulate("stooges", "Curly");
      j.accumulate("stooges", "Larry");
      j.accumulate("stooges", "Moe");
      j.accumulate("stoogearray", j.get("stooges"));
      j.put("map", m);
      j.put("collection", c);
      j.put("array", a);
      a.put(m);
      a.put(c);
      System.out.println(j.toString(4));

      s =
          "{plist=Apple; AnimalSmells = { pig = piggish; lamb = lambish; worm = wormy; }; AnimalSounds = { pig = oink; lamb = baa; worm = baa;  Lisa = \"Why is the worm talking like a lamb?\" } ; AnimalColors = { pig = pink; lamb = black; worm = pink; } } ";
      j = new JSONObject(s);
      System.out.println(j.toString(4));

      s = " (\"San Francisco\", \"New York\", \"Seoul\", \"London\", \"Seattle\", \"Shanghai\")";
      a = new JSONArray(s);
      System.out.println(a.toString());

      s =
          "<a ichi='1' ni='2'><b>The content of b</b> and <c san='3'>The content of c</c><d>do</d><e></e><d>re</d><f/><d>mi</d></a>";
      j = XML.toJSONObject(s);

      System.out.println(j.toString(2));
      System.out.println(XML.toString(j));
      System.out.println("");
      ja = JSONML.toJSONArray(s);
      System.out.println(ja.toString(4));
      System.out.println(JSONML.toString(ja));
      System.out.println("");

      s =
          "<Root><MsgType type=\"node\"><BatchType type=\"string\">111111111111111</BatchType></MsgType></Root>";
      j = JSONML.toJSONObject(s);
      System.out.println(j);
      ja = JSONML.toJSONArray(s);
      System.out.println(ja);

      System.out.println("\nTesting Exceptions: ");

      System.out.print("Exception: ");
      try {
        a = new JSONArray();
        a.put(Double.NEGATIVE_INFINITY);
        a.put(Double.NaN);
        System.out.println(a.toString());
      } catch (Exception e) {
        System.out.println(e);
      }
      System.out.print("Exception: ");
      try {
        System.out.println(j.getDouble("stooge"));
      } catch (Exception e) {
        System.out.println(e);
      }
      System.out.print("Exception: ");
      try {
        System.out.println(j.getDouble("howard"));
      } catch (Exception e) {
        System.out.println(e);
      }
      System.out.print("Exception: ");
      try {
        System.out.println(j.put(null, "howard"));
      } catch (Exception e) {
        System.out.println(e);
      }
      System.out.print("Exception: ");
      try {
        System.out.println(a.getDouble(0));
      } catch (Exception e) {
        System.out.println(e);
      }
      System.out.print("Exception: ");
      try {
        System.out.println(a.get(-1));
      } catch (Exception e) {
        System.out.println(e);
      }
      System.out.print("Exception: ");
      try {
        System.out.println(a.put(Double.NaN));
      } catch (Exception e) {
        System.out.println(e);
      }
      System.out.print("Exception: ");
      try {
        j = XML.toJSONObject("<a><b>    ");
      } catch (Exception e) {
        System.out.println(e);
      }
      System.out.print("Exception: ");
      try {
        j = XML.toJSONObject("<a></b>    ");
      } catch (Exception e) {
        System.out.println(e);
      }
      System.out.print("Exception: ");
      try {
        j = XML.toJSONObject("<a></a    ");
      } catch (Exception e) {
        System.out.println(e);
      }
      System.out.print("Exception: ");
      try {
        ja = new JSONArray(new Object());
        System.out.println(ja.toString());
      } catch (Exception e) {
        System.out.println(e);
      }

      System.out.print("Exception: ");
      try {
        s = "[)";
        a = new JSONArray(s);
        System.out.println(a.toString());
      } catch (Exception e) {
        System.out.println(e);
      }

      System.out.print("Exception: ");
      try {
        s = "<xml";
        ja = JSONML.toJSONArray(s);
        System.out.println(ja.toString(4));
      } catch (Exception e) {
        System.out.println(e);
      }

      System.out.print("Exception: ");
      try {
        s = "<right></wrong>";
        ja = JSONML.toJSONArray(s);
        System.out.println(ja.toString(4));
      } catch (Exception e) {
        System.out.println(e);
      }

      System.out.print("Exception: ");
      try {
        s = "{\"koda\": true, \"koda\": true}";
        j = new JSONObject(s);
        System.out.println(j.toString(4));
      } catch (Exception e) {
        System.out.println(e);
      }

      System.out.print("Exception: ");
      try {
        jj = new JSONStringer();
        s =
            jj.object()
                .key("bosanda")
                .value("MARIE HAA'S")
                .key("bosanda")
                .value("MARIE HAA\\'S")
                .endObject()
                .toString();
        System.out.println(j.toString(4));
      } catch (Exception e) {
        System.out.println(e);
      }
    } catch (Exception e) {
      System.out.println(e.toString());
    }
  }