Example #1
0
 private boolean appendToList(List<JSONObject> tx, StringBuffer buffer) {
   if (buffer.length() == 0) return true;
   switch (buffer.charAt(0)) {
     case '[':
       int closePos = 0;
       boolean inString = false;
       int inArray = 0;
       for (int i = 1; i < buffer.length() && closePos == 0; i++) {
         switch (buffer.charAt(i)) {
           case '"':
             if (buffer.charAt(i - 1) != '\\') inString = !inString;
             break;
           case ']':
             if (!inString) {
               if (inArray == 0) closePos = i;
               else inArray--;
             }
             break;
           case '[':
             if (!inString) inArray++;
             break;
           default:
             break;
         }
       }
       if (inArray != 0 || closePos == 0) return false;
       List<JSONObject> subList = new ArrayList<JSONObject>(5);
       StringBuffer subBuff = new StringBuffer(buffer.substring(1, closePos));
       boolean finished = appendToList(subList, subBuff);
       if (finished) {
         buffer.delete(0, closePos + 1);
         tx.add(new JSONObject(subList));
         return appendToList(tx, buffer);
       } else return false;
     case '"':
       int finishPos = 0;
       do {
         finishPos = buffer.indexOf("\"", finishPos + 1);
       } while (finishPos == -1 || buffer.charAt(finishPos - 1) == '\\');
       if (finishPos == -1) return false;
       tx.add(new JSONObject(buffer.substring(1, finishPos)));
       buffer.delete(0, finishPos + 1);
       return appendToList(tx, buffer);
     case ',':
     case ' ':
       buffer.delete(0, 1);
       return appendToList(tx, buffer);
     default:
       String first = buffer.toString().split(",")[0].trim();
       if (first.equals("true")) {
         tx.add(new JSONObject(true));
         buffer.delete(0, 4);
         return appendToList(tx, buffer);
       } else if (first.equals("false")) {
         tx.add(new JSONObject(false));
         buffer.delete(0, 5);
         return appendToList(tx, buffer);
       } else if (first.matches("^-?[0-9]*$")) {
         tx.add(new JSONObject(Integer.parseInt(first)));
         buffer.delete(0, first.length());
         return appendToList(tx, buffer);
       } else fail();
   }
   return false;
 }