Advertisement
Chiddix

JsonDecoder v1.0.1

Sep 2nd, 2014
260
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.43 KB | None | 0 0
  1. import java.io.IOException;
  2. import java.io.InputStream;
  3. import java.util.ArrayList;
  4. import java.util.HashMap;
  5. import java.util.List;
  6. import java.util.Map;
  7.  
  8. public final class JsonDecoder {
  9.  
  10.     private final byte[] buffer;
  11.  
  12.     private int pos = 0;
  13.  
  14.     public JsonDecoder(final InputStream inputStream) throws IOException {
  15.         buffer = new byte[inputStream.available()];
  16.         inputStream.read(buffer);
  17.     }
  18.  
  19.     public JsonDecoder(final String string) {
  20.         buffer = string.getBytes();
  21.     }
  22.  
  23.     public JsonDecoder(final byte[] data) {
  24.         buffer = data;
  25.     }
  26.  
  27.     private Object decodeObject() {
  28.         if (buffer[pos] == '{') {
  29.             return decodeMap();
  30.         } else if (buffer[pos] == '"') {
  31.             return decodeString();
  32.         } else if (buffer[pos] == 't' || buffer[pos] == 'f') {
  33.             return decodeBoolean();
  34.         } else if (buffer[pos] >= '0' && buffer[pos] <= '9') {
  35.             return decodeNumber();
  36.         } else if (buffer[pos] == '[') {
  37.             System.out.println(pos);
  38.             return decodeList();
  39.         }
  40.         return null;
  41.     }
  42.  
  43.     public Map<String, Object> decodeMap() {
  44.         final Map<String, Object> map = new HashMap<String, Object>();
  45.         while (buffer[pos++] != '}') {
  46.             if (buffer[pos] == ',') {
  47.                 continue;
  48.             }
  49.             final String key = decodeString();
  50.             pos++;
  51.             final Object object = decodeObject();
  52.             map.put(key, object);
  53.         }
  54.         return map;
  55.     }
  56.  
  57.     private String decodeString() {
  58.         int start = ++pos;
  59.         while (buffer[++pos] != '"') {
  60.            
  61.         }
  62.         return new String(buffer, start, pos++ - start);
  63.     }
  64.  
  65.     private boolean decodeBoolean() {
  66.         if (buffer[pos] == 't') {
  67.             pos += 4;
  68.             return true;
  69.         } else {
  70.             pos += 5;
  71.             return false;
  72.         }
  73.     }
  74.  
  75.     private Number decodeNumber() {
  76.         int start = pos;
  77.         boolean integer = true;
  78.         while (buffer[pos++] != ',') {
  79.             if (pos == buffer.length) {
  80.                 break;
  81.             }
  82.             if (buffer[pos] == '.') {
  83.                 integer = false;
  84.             }
  85.         }
  86.         pos--;
  87.         final String value = new String(buffer, start, pos - start);
  88.         Number number;
  89.         if (integer) {
  90.             try {
  91.                 number = Integer.parseInt(value);
  92.             } catch (final NumberFormatException e) {
  93.                 number = Long.parseLong(value);
  94.             }
  95.         } else {
  96.             try {
  97.                 number = Float.parseFloat(value);
  98.             } catch (final NumberFormatException e) {
  99.                 number = Double.parseDouble(value);
  100.             }
  101.         }
  102.         return number;
  103.     }
  104.  
  105.     private List<Object> decodeList() {
  106.         final List<Object> list = new ArrayList<Object>();
  107.         while (buffer[pos++] != ']') {
  108.             list.add(decodeObject());
  109.         }
  110.         return list;
  111.     }
  112. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement