示例#1
0
  /**
   * Encode a list into JSON text and write it to out. If this list is also a JSONStreamAware or a
   * JSONAware, JSONStreamAware and JSONAware specific behaviours will be ignored at this top level.
   *
   * @see org.json.simpleForBukkit.JSONValue#writeJSONString(Object, Writer)
   * @param list
   * @param out
   */
  public static void writeJSONString(List<Object> list, Writer out) throws IOException {
    if (list == null) {
      out.write("null");
      return;
    }

    boolean first = true;
    Iterator<Object> iter = list.iterator();

    out.write('[');
    while (iter.hasNext()) {
      if (first) first = false;
      else out.write(',');

      Object value = iter.next();
      if (value == null) {
        out.write("null");
        continue;
      }

      JSONValue.writeJSONString(value, out);
    }
    out.write(']');
  }
示例#2
0
  /**
   * Encode an object into JSON text and write it to out.
   *
   * <p>If this object is a Map or a List, and it's also a JSONStreamAware or a JSONAware,
   * JSONStreamAware or JSONAware will be considered firstly.
   *
   * <p>DO NOT call this method from writeJSONString(Writer) of a class that implements both
   * JSONStreamAware and (Map or List) with "this" as the first parameter, use
   * JSONObject.writeJSONString(Map, Writer) or JSONArray.writeJSONString(List, Writer) instead.
   *
   * @see org.json.simpleForBukkit.JSONObject#writeJSONString(Map, Writer)
   * @see org.json.simpleForBukkit.JSONArray#writeJSONString(List, Writer)
   * @param value
   * @param writer
   */
  @SuppressWarnings("unchecked")
  public static void writeJSONString(Object value, Writer out) throws IOException {
    if (value == null) {
      out.write("null");
      return;
    }

    if (value instanceof String) {
      out.write('\"');
      out.write(escape((String) value));
      out.write('\"');
      return;
    }

    if (value instanceof Double) {
      if (((Double) value).isInfinite() || ((Double) value).isNaN()) out.write("null");
      else out.write(value.toString());
      return;
    }

    if (value instanceof Float) {
      if (((Float) value).isInfinite() || ((Float) value).isNaN()) out.write("null");
      else out.write(value.toString());
      return;
    }

    if (value instanceof Number) {
      out.write(value.toString());
      return;
    }

    if (value instanceof Boolean) {
      out.write(value.toString());
      return;
    }

    if ((value instanceof JSONStreamAware)) {
      ((JSONStreamAware) value).writeJSONString(out);
      return;
    }

    if ((value instanceof JSONAware)) {
      out.write(((JSONAware) value).toJSONString());
      return;
    }

    if (value instanceof Map<?, ?>) {
      JSONObject.writeJSONString((Map<Object, Object>) value, out);
      return;
    }

    if (value instanceof List<?>) {
      JSONArray.writeJSONString((List<Object>) value, out);
      return;
    }

    if (BukkitStringifier.canHandle(value.getClass())) {
      writeJSONString(BukkitStringifier.handle(value), out);
      return;
    }

    out.write(value.toString());
  }