Advertisement
Chiddix

JsonDecoder v1.0.0

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