JSON tokenizer.It makes tokens for parsing json data. : JSON « Development Class « Java

Home
Java
1.2D Graphics GUI
2.3D
3.Advanced Graphics
4.Ant
5.Apache Common
6.Chart
7.Class
8.Collections Data Structure
9.Data Type
10.Database SQL JDBC
11.Design Pattern
12.Development Class
13.EJB3
14.Email
15.Event
16.File Input Output
17.Game
18.Generics
19.GWT
20.Hibernate
21.I18N
22.J2EE
23.J2ME
24.JavaFX
25.JDK 6
26.JDK 7
27.JNDI LDAP
28.JPA
29.JSP
30.JSTL
31.Language Basics
32.Network Protocol
33.PDF RTF
34.Reflection
35.Regular Expressions
36.Scripting
37.Security
38.Servlets
39.Spring
40.Swing Components
41.Swing JFC
42.SWT JFace Eclipse
43.Threads
44.Tiny Application
45.Velocity
46.Web Services SOA
47.XML
Java » Development Class » JSON 




JSON tokenizer.It makes tokens for parsing json data.
 
/*
 * Copyright 2008-2010 the T2 Project ant the Others.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
//package org.t2framework.commons.util;

/**
 
 * <#if locale="en">
 * <p>
 * JSON tokenizer.It makes tokens for parsing json data.
 * </p>
 * <#else>
 * <p>
 
 * </p>
 * </#if>
 
 @author shot
 
 *         TODO : unicode, quotation("), reverse solidus(\), solidus(/),
 
 */
public class JSONTokenizer {

  public static final char COMMA = ',';

  public static final char COLON = ':';

  public static final char SINGLE_QUOTE = '\'';

  public static final char DOUBLE_QUOTE = '\"';

  public static final String NULL_STRING = "null";

  public static final String TRUE_STRING = "true";

  public static final String FALSE_STRING = "false";

  public static final char START_BRACKET = '[';

  public static final char END_BRACKET = ']';

  public static final char START_BRACE = '{';

  public static final char END_BRACE = '}';

  // public static final char UTF8_BOM = 0xFEFF;

  protected final String orgString;

  protected final int orgLength;

  protected String tokenString;

  protected int pos;

  protected int nextPos;

  protected TokenType type = TokenType.EOF;

  public JSONTokenizer(String s) {
    // TODO : check grammer first.
    this.orgString = (s != null? s : "null";
    this.orgLength = this.orgString.length();
    this.tokenString = this.orgString;
    prepare(0);
  }

  protected void prepare(int i) {
    if (i < orgLength) {
      char ch = orgString.charAt(i);
      if (ch == START_BRACE) {
        type = TokenType.START_BRACE;
      else if (ch == END_BRACE) {
        type = TokenType.END_BRACE;
      else if (ch == START_BRACKET) {
        type = TokenType.START_BRACKET;
      else if (ch == END_BRACKET) {
        type = TokenType.END_BRACKET;
      }
      this.pos = i;
      this.nextPos = i + 1;
    else {
      type = TokenType.EOF;
    }
  }

  public TokenType nextToken() {
    if (type == TokenType.EOF) {
      return TokenType.EOF;
    }
    String s = this.tokenString;
    TokenType retType = TokenType.EOF;
    boolean key = true;
    for (int i = this.nextPos; i < this.orgLength; i++) {
      char ch = this.orgString.charAt(i);
      if (isIgnorable(ch)) {
        continue;
      }
      if (ch == START_BRACE) {
        s = getElement(nextPos, this.orgLength - 1);
        retType = TokenType.START_BRACE;
        prepare(i);
        key = true;
        break;
      else if (ch == START_BRACKET) {
        s = getElement(nextPos, this.orgLength - 1);
        retType = TokenType.START_BRACKET;
        prepare(i);
        key = true;
        break;
      else if (ch == COLON) {
        if (i == this.orgLength - 1) {
          throw new IllegalStateException();
        }
        s = getElement(nextPos, i - 1);
        this.type = retType = TokenType.COLON;
        prepare(i);
        key = true;
        break;
      else if (ch == COMMA) {
        if (i == this.orgLength - 1) {
          throw new IllegalArgumentException();
        }
        s = getElement(nextPos, i - 1);
        this.type = retType = (isObjectOrArrayEnd(i - 1)) ? TokenType.END_COMMA
            : TokenType.COMMA;
        prepare(i);
        key = false;
        break;
      else if (ch == END_BRACKET) {
        this.type = (i == this.orgLength - 1? TokenType.EOF
            : TokenType.END_BRACKET;
        retType = TokenType.END_BRACKET;
        s = getElement(nextPos, i - 1);
        prepare(i);
        key = false;
        break;
      else if (ch == END_BRACE) {
        this.type = (i == this.orgLength - 1? TokenType.EOF
            : TokenType.END_BRACE;
        retType = TokenType.END_BRACE;
        s = getElement(this.nextPos, i - 1);
        prepare(i);
        key = false;
        break;
      }
    }
    s = removeIgnorable(s);
    this.tokenString = (key? unquote(s: s;
    return retType;
  }

  protected boolean isObjectOrArrayEnd(int pos) {
    for (int i = pos; < i; i--) {
      char c = this.orgString.charAt(i);
      if (isIgnorable(c)) {
        continue;
      }
      if (c == END_BRACE || c == END_BRACKET) {
        return true;
      else {
        return false;
      }
    }
    return false;
  }

  /**
   * <#if locale="en">
   * <p>
   * TODO refactor.
   
   * </p>
   * <#else>
   * <p>
   
   * </p>
   * </#if>
   
   @param s
   @return
   */
  protected String removeIgnorable(String s) {
    if (isEmpty(s)) {
      return s;
    }
    for (int pos1 = 0; pos1 < s.length(); pos1++) {
      if (isIgnorable(s.charAt(pos1)) == false) {
        return s.substring(pos1);
      }
    }
    return "";
  }

  public static boolean isEmpty(String text) {
    return text == null || text.length() == 0;
  }

  protected String getElement(final int orgStartPos, final int orgEndPos) {
    int startPos = orgStartPos;
    for (; startPos < orgEndPos; startPos++) {
      char ch = this.orgString.charAt(startPos);
      if (isIgnorable(ch== false) {
        break;
      }
    }
    int endPos = orgEndPos;
    for (; startPos < endPos; endPos--) {
      char ch = this.orgString.charAt(endPos);
      if (isIgnorable(ch== false) {
        break;
      }
    }
    return this.orgString.substring(startPos, endPos + 1);
  }

  protected static boolean isIgnorable(char ch) {
    boolean ret = false;
    switch (ch) {
    case '\b':
    case '\f':
    case '\n':
    case '\r':
    case '\t':
    case ' ':
      ret = true;
      break;
    default:
      ret = false;
      break;
    }
    return ret;
  }

  public static String unquote(String str) {
    if (str == null || str.length() == 0) {
      return str;
    }
    if (isQuoted(str, DOUBLE_QUOTE)) {
      return chopQuote(str);
    else if (isQuoted(str, SINGLE_QUOTE)) {
      return chopQuote(str);
    else {
      return str;
    }
  }

  public static String chopQuote(String str) {
    return str.substring(1, str.length() 1);
  }

  protected static boolean isQuoted(String str, char quote) {
    return str.indexOf(quote== && str.lastIndexOf(quote0;
  }

  public String getToken() {
    return this.tokenString;
  }

  public static enum TokenType {
    /**
     * <#if locale="en">
     * <p>
     * "{"
     * </p>
     * <#else>
     * <p>
     
     * </p>
     * </#if>
     */
    START_BRACE {
      public String toString() {
        return "{";
      }
    },

    /**
     * <#if locale="en">
     * <p>
     * "}"
     * </p>
     * <#else>
     * <p>
     
     * </p>
     * </#if>
     */
    END_BRACE {
      public String toString() {
        return "}";
      }
    },

    /**
     * <#if locale="en">
     * <p>
     * "["
     * </p>
     * <#else>
     * <p>
     
     * </p>
     * </#if>
     */
    START_BRACKET {
      public String toString() {
        return "[";
      }
    },

    /**
     * <#if locale="en">
     * <p>
     * "]"
     * </p>
     * <#else>
     * <p>
     
     * </p>
     * </#if>
     */
    END_BRACKET {
      public String toString() {
        return "]";
      }
    },

    /**
     * <#if locale="en">
     * <p>
     * ","
     * </p>
     * <#else>
     * <p>
     
     * </p>
     * </#if>
     */
    COMMA {
      public String toString() {
        return ",";
      }
    },

    /**
     * <#if locale="en">
     * <p>
     * ":"
     * </p>
     * <#else>
     * <p>
     
     * </p>
     * </#if>
     */
    COLON {
      public String toString() {
        return ":";
      }
    },

    /**
     * <#if locale="en">
     * <p>
     * "," and it is the end of {} or [].
     * </p>
     * <#else>
     * <p>
     
     * </p>
     * </#if>
     */
    END_COMMA {
      public String toString() {
        return ",";
      }
    },

    /**
     * <#if locale="en">
     * <p>
     * End of file.
     * </p>
     * <#else>
     * <p>
     
     * </p>
     * </#if>
     */
    EOF;

  }

  public TokenType currentTokenType() {
    return type;
  }
}
-------------------------
/*
 * Copyright 2008-2009 the T2 Project ant the Others.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package org.t2framework.commons.util;

import org.t2framework.commons.util.JSONTokenizer.TokenType;

import junit.framework.TestCase;

public class JSONTokenizerTest extends TestCase {

  public void test1_blank() throws Exception {
    JSONTokenizer tokenizer = new JSONTokenizer("");
    assertEquals(TokenType.EOF, tokenizer.nextToken());
    assertEquals("", tokenizer.getToken());
  }

  public void test2_null() throws Exception {
    JSONTokenizer tokenizer = new JSONTokenizer(null);
    assertEquals(TokenType.EOF, tokenizer.nextToken());
    assertEquals("null", tokenizer.getToken());
  }

  public void test3_keyvalue() throws Exception {
    JSONTokenizer tokenizer = new JSONTokenizer("{\"aaa\":123}");
    assertEquals(TokenType.START_BRACE, tokenizer.currentTokenType());
    assertEquals("{\"aaa\":123}", tokenizer.getToken());
    assertEquals(TokenType.COLON, tokenizer.nextToken());
    assertEquals("aaa", tokenizer.getToken());
    assertEquals(TokenType.END_BRACE, tokenizer.nextToken());
    assertEquals("123", tokenizer.getToken());
    assertEquals(TokenType.EOF, tokenizer.nextToken());
  }

  public void test4_array() throws Exception {
    JSONTokenizer tokenizer = new JSONTokenizer("[\"aaa\",123,\"b\"]");
    assertEquals(TokenType.START_BRACKET, tokenizer.currentTokenType());
    assertEquals("[\"aaa\",123,\"b\"]", tokenizer.getToken());
    assertEquals(TokenType.COMMA, tokenizer.nextToken());
    assertEquals("\"aaa\"", tokenizer.getToken());
    assertEquals(TokenType.COMMA, tokenizer.nextToken());
    assertEquals("123", tokenizer.getToken());
    assertEquals(TokenType.END_BRACKET, tokenizer.nextToken());
    assertEquals("\"b\"", tokenizer.getToken());
    assertEquals(TokenType.EOF, tokenizer.nextToken());
  }

  public void test5_emptyobject() throws Exception {
    JSONTokenizer tokenizer = new JSONTokenizer("{}");
    assertEquals(TokenType.START_BRACE, tokenizer.currentTokenType());
    assertEquals("{}", tokenizer.getToken());
    assertEquals(TokenType.END_BRACE, tokenizer.nextToken());
    assertEquals("", tokenizer.getToken());
    assertEquals(TokenType.EOF, tokenizer.nextToken());
  }

  public void test6_emptyarray() throws Exception {
    JSONTokenizer tokenizer = new JSONTokenizer("[]");
    assertEquals(TokenType.START_BRACKET, tokenizer.currentTokenType());
    assertEquals("[]", tokenizer.getToken());
    assertEquals(TokenType.END_BRACKET, tokenizer.nextToken());
    assertEquals("", tokenizer.getToken());
    assertEquals(TokenType.EOF, tokenizer.nextToken());
  }

  public void test7_multiplekeyvalue() throws Exception {
    JSONTokenizer tokenizer = new JSONTokenizer(
        "{\"aaa\":123,\"bbb\":true}");
    assertEquals(TokenType.START_BRACE, tokenizer.currentTokenType());
    assertEquals("{\"aaa\":123,\"bbb\":true}", tokenizer.getToken());
    assertEquals(TokenType.COLON, tokenizer.nextToken());
    assertEquals("aaa", tokenizer.getToken());
    assertEquals(TokenType.COMMA, tokenizer.nextToken());
    assertEquals("123", tokenizer.getToken());
    assertEquals(TokenType.COLON, tokenizer.nextToken());
    assertEquals("bbb", tokenizer.getToken());
    assertEquals(TokenType.END_BRACE, tokenizer.nextToken());
    assertEquals("true", tokenizer.getToken());
    assertEquals(TokenType.EOF, tokenizer.nextToken());
  }

  public void test8_keyvaluewithsinglequote() throws Exception {
    JSONTokenizer tokenizer = new JSONTokenizer("{'aaa':'123'}");
    assertEquals(TokenType.START_BRACE, tokenizer.currentTokenType());
    assertEquals("{'aaa':'123'}", tokenizer.getToken());
    assertEquals(TokenType.COLON, tokenizer.nextToken());
    assertEquals("aaa", tokenizer.getToken());
    assertEquals(TokenType.END_BRACE, tokenizer.nextToken());
    assertEquals("'123'", tokenizer.getToken());
    assertEquals(TokenType.EOF, tokenizer.nextToken());
  }

  public void test9_blankwithtab() throws Exception {
    JSONTokenizer tokenizer = new JSONTokenizer("{\t}");
    assertEquals("{\t}", tokenizer.getToken());
    assertEquals(TokenType.END_BRACE, tokenizer.nextToken());
    assertEquals("", tokenizer.getToken());
  }

  public void test10_blankwithbackspace() throws Exception {
    JSONTokenizer tokenizer = new JSONTokenizer("{\b}");
    assertEquals("{\b}", tokenizer.getToken());
    assertEquals(TokenType.END_BRACE, tokenizer.nextToken());
    assertEquals("", tokenizer.getToken());
  }

  public void test11_blankwithformfeed() throws Exception {
    JSONTokenizer tokenizer = new JSONTokenizer("{\f}");
    assertEquals("{\f}", tokenizer.getToken());
    assertEquals(TokenType.END_BRACE, tokenizer.nextToken());
    assertEquals("", tokenizer.getToken());
  }

  public void test12_blankwithnewline() throws Exception {
    JSONTokenizer tokenizer = new JSONTokenizer("{\n}");
    assertEquals("{\n}", tokenizer.getToken());
    assertEquals(TokenType.END_BRACE, tokenizer.nextToken());
    assertEquals("", tokenizer.getToken());
  }

  public void test13_blankwithcarriagereturn() throws Exception {
    JSONTokenizer tokenizer = new JSONTokenizer("{\r}");
    assertEquals("{\r}", tokenizer.getToken());
    assertEquals(TokenType.END_BRACE, tokenizer.nextToken());
    assertEquals("", tokenizer.getToken());
  }

  public void test14_keyvalue_nest1() throws Exception {
    JSONTokenizer tokenizer = new JSONTokenizer(
        "{\"aaa\":123, \"bbb\":{\"b1\":true}}");
    assertEquals(TokenType.START_BRACE, tokenizer.currentTokenType());
    assertEquals("{\"aaa\":123, \"bbb\":{\"b1\":true}}", tokenizer
        .getToken());
    assertEquals(TokenType.COLON, tokenizer.nextToken());
    assertEquals("aaa", tokenizer.getToken());
    assertEquals(TokenType.COMMA, tokenizer.nextToken());
    assertEquals("123", tokenizer.getToken());
    assertEquals(TokenType.COLON, tokenizer.nextToken());
    assertEquals("bbb", tokenizer.getToken());
    {
      assertEquals(TokenType.START_BRACE, tokenizer.nextToken());
      assertEquals("{\"b1\":true}}", tokenizer.getToken());
      assertEquals(TokenType.COLON, tokenizer.nextToken());
      assertEquals("b1", tokenizer.getToken());
      assertEquals(TokenType.END_BRACE, tokenizer.nextToken());
      assertEquals("true", tokenizer.getToken());
    }
    assertEquals(TokenType.END_BRACE, tokenizer.nextToken());
  }

  public void test15_ignorableSpaceShouldIgnoreAtObject() throws Exception {
    JSONTokenizer tokenizer = new JSONTokenizer("{\"aaa\"\r\t:\n123   }");
    assertEquals(TokenType.START_BRACE, tokenizer.currentTokenType());
    assertEquals(TokenType.COLON, tokenizer.nextToken());
    assertEquals("aaa", tokenizer.getToken());
    assertEquals(TokenType.END_BRACE, tokenizer.nextToken());
    assertEquals("123", tokenizer.getToken());
    assertEquals(TokenType.EOF, tokenizer.nextToken());
  }

  public void test16_ignorableSpaceShouldIgnoreAtArray() throws Exception {
    JSONTokenizer tokenizer = new JSONTokenizer(
        "[ \"aaa\"\t,123\b,\f\'b\'     ]");
    assertEquals(TokenType.START_BRACKET, tokenizer.currentTokenType());
    assertEquals(TokenType.COMMA, tokenizer.nextToken());
    assertEquals("\"aaa\"", tokenizer.getToken());
    assertEquals(TokenType.COMMA, tokenizer.nextToken());
    assertEquals("123", tokenizer.getToken());
    assertEquals(TokenType.END_BRACKET, tokenizer.nextToken());
    assertEquals("\'b\'", tokenizer.getToken());
    assertEquals(TokenType.EOF, tokenizer.nextToken());
  }

  public void test17_blankwithlotsofignorables() throws Exception {
    JSONTokenizer tokenizer = new JSONTokenizer("{\t\r\n    \t}");
    assertEquals(TokenType.END_BRACE, tokenizer.nextToken());
    assertEquals("", tokenizer.getToken());
  }

  public void test18_keyvalue_nest3_array() throws Exception {
    JSONTokenizer tokenizer = new JSONTokenizer(
        "{\"aaa\":123, \"bbb\":{\"b1\":true},\t\"ccc\":\"fuga\", \"array1\":[\"1.1233333333000000000000001\"\r,\b1.1233333333000000000000001, \"3.0\"]}");
    assertEquals(TokenType.START_BRACE, tokenizer.currentTokenType());
    assertEquals(TokenType.COLON, tokenizer.nextToken());
    assertEquals("aaa", tokenizer.getToken());
    assertEquals(TokenType.COMMA, tokenizer.nextToken());
    assertEquals("123", tokenizer.getToken());
    assertEquals(TokenType.COLON, tokenizer.nextToken());
    assertEquals("bbb", tokenizer.getToken());
    {
      assertEquals(TokenType.START_BRACE, tokenizer.nextToken());
      assertEquals(TokenType.COLON, tokenizer.nextToken());
      assertEquals("b1", tokenizer.getToken());
      assertEquals(TokenType.END_BRACE, tokenizer.nextToken());
      assertEquals("true", tokenizer.getToken());
    }
    assertEquals(TokenType.END_COMMA, tokenizer.nextToken());
    assertEquals(TokenType.COLON, tokenizer.nextToken());
    assertEquals("ccc", tokenizer.getToken());
    assertEquals(TokenType.COMMA, tokenizer.nextToken());
    assertEquals("\"fuga\"", tokenizer.getToken());
    assertEquals(TokenType.COLON, tokenizer.nextToken());
    assertEquals("array1", tokenizer.getToken());
    {
      assertEquals(TokenType.START_BRACKET, tokenizer.nextToken());
      assertEquals(TokenType.COMMA, tokenizer.nextToken());
      assertEquals("\"1.1233333333000000000000001\"", tokenizer
          .getToken());
      assertEquals(TokenType.COMMA, tokenizer.nextToken());
      assertEquals("1.1233333333000000000000001", tokenizer.getToken());
      assertEquals(TokenType.END_BRACKET, tokenizer.nextToken());
      assertEquals("\"3.0\"", tokenizer.getToken());
    }
    assertEquals(TokenType.END_BRACE, tokenizer.nextToken());
    assertEquals(TokenType.EOF, tokenizer.nextToken());
  }

  public void test18_stringEnquote() throws Exception {
    JSONTokenizer tokenizer = new JSONTokenizer("{\"a'aa\":\"ã?‚ã?„ã?†ã?ˆã?Š\"}");
    assertEquals(TokenType.START_BRACE, tokenizer.currentTokenType());
    assertEquals(TokenType.COLON, tokenizer.nextToken());
    assertEquals("a'aa", tokenizer.getToken());
    assertEquals(TokenType.END_BRACE, tokenizer.nextToken());
    assertEquals("\"ã?‚ã?„ã?†ã?ˆã?Š\"", tokenizer.getToken());
    assertEquals(TokenType.EOF, tokenizer.nextToken());
  }

  public void test19_booleanarray() throws Exception {
    JSONTokenizer tokenizer = new JSONTokenizer("[true, false,true]");
    assertEquals(TokenType.START_BRACKET, tokenizer.currentTokenType());
    assertEquals(TokenType.COMMA, tokenizer.nextToken());
    assertEquals("true", tokenizer.getToken());
    assertEquals(TokenType.COMMA, tokenizer.nextToken());
    assertEquals("false", tokenizer.getToken());
    assertEquals(TokenType.END_BRACKET, tokenizer.nextToken());
    assertEquals("true", tokenizer.getToken());
    assertEquals(TokenType.EOF, tokenizer.nextToken());
  }

  public void test20_nestarray() throws Exception {
    JSONTokenizer tokenizer = new JSONTokenizer("[1, [2, 3, 4, 5], 3]");
    assertEquals(TokenType.START_BRACKET, tokenizer.currentTokenType());
    assertEquals(TokenType.COMMA, tokenizer.nextToken());
    assertEquals("1", tokenizer.getToken());
    {
      assertEquals(TokenType.START_BRACKET, tokenizer.nextToken());
      assertEquals(TokenType.COMMA, tokenizer.nextToken());
      assertEquals("2", tokenizer.getToken());
      assertEquals(TokenType.COMMA, tokenizer.nextToken());
      assertEquals("3", tokenizer.getToken());
      assertEquals(TokenType.COMMA, tokenizer.nextToken());
      assertEquals("4", tokenizer.getToken());
      assertEquals(TokenType.END_BRACKET, tokenizer.nextToken());
      assertEquals("5", tokenizer.getToken());
    }
    assertEquals(TokenType.END_COMMA, tokenizer.nextToken());
    assertEquals(TokenType.END_BRACKET, tokenizer.nextToken());
    assertEquals("3", tokenizer.getToken());
    assertEquals(TokenType.EOF, tokenizer.nextToken());
  }

  public void test21_nestarrayandobjects() throws Exception {
    JSONTokenizer tokenizer = new JSONTokenizer(
        "[1, [2, 3, 4, 5], \"key\":{true, false, \"hoge\", \"array\":[0.001, 0.00001, 1.2E-7]   }, 3]");
    assertEquals(TokenType.START_BRACKET, tokenizer.currentTokenType());
    assertEquals(TokenType.COMMA, tokenizer.nextToken());
    assertEquals("1", tokenizer.getToken());
    {
      assertEquals(TokenType.START_BRACKET, tokenizer.nextToken());
      assertEquals(TokenType.COMMA, tokenizer.nextToken());
      assertEquals("2", tokenizer.getToken());
      assertEquals(TokenType.COMMA, tokenizer.nextToken());
      assertEquals("3", tokenizer.getToken());
      assertEquals(TokenType.COMMA, tokenizer.nextToken());
      assertEquals("4", tokenizer.getToken());
      assertEquals(TokenType.END_BRACKET, tokenizer.nextToken());
      assertEquals("5", tokenizer.getToken());
    }
    assertEquals(TokenType.END_COMMA, tokenizer.nextToken());
    assertEquals(TokenType.COLON, tokenizer.nextToken());
    assertEquals("key", tokenizer.getToken());
    {
      assertEquals(TokenType.START_BRACE, tokenizer.nextToken());
      assertEquals(TokenType.COMMA, tokenizer.nextToken());
      assertEquals("true", tokenizer.getToken());
      assertEquals(TokenType.COMMA, tokenizer.nextToken());
      assertEquals("false", tokenizer.getToken());
      assertEquals(TokenType.COMMA, tokenizer.nextToken());
      assertEquals("\"hoge\"", tokenizer.getToken());
      assertEquals(TokenType.COLON, tokenizer.nextToken());
      assertEquals("array", tokenizer.getToken());
      {
        assertEquals(TokenType.START_BRACKET, tokenizer.nextToken());
        assertEquals(TokenType.COMMA, tokenizer.nextToken());
        assertEquals("0.001", tokenizer.getToken());
        assertEquals(TokenType.COMMA, tokenizer.nextToken());
        assertEquals("0.00001", tokenizer.getToken());
        assertEquals(TokenType.END_BRACKET, tokenizer.nextToken());
        assertEquals("1.2E-7", tokenizer.getToken());
      }
      assertEquals(TokenType.END_BRACE, tokenizer.nextToken());
    }
    assertEquals(TokenType.END_COMMA, tokenizer.nextToken());
    assertEquals(TokenType.END_BRACKET, tokenizer.nextToken());
    assertEquals("3", tokenizer.getToken());
    assertEquals(TokenType.EOF, tokenizer.nextToken());
  }

  public void test22_stringSingleEnquote() throws Exception {
    JSONTokenizer tokenizer = new JSONTokenizer("{\'a'aa\':\"ã?‚ã?„ã?†ã?ˆã?Š\"}");
    assertEquals(TokenType.START_BRACE, tokenizer.currentTokenType());
    assertEquals(TokenType.COLON, tokenizer.nextToken());
    assertEquals("a'aa", tokenizer.getToken());
    assertEquals(TokenType.END_BRACE, tokenizer.nextToken());
    assertEquals("\"ã?‚ã?„ã?†ã?ˆã?Š\"", tokenizer.getToken());
    assertEquals(TokenType.EOF, tokenizer.nextToken());
  }

  /**
   
   * {@.en }
   
   * <br />
   
   * {@.ja ç?¾åœ¨ç·©ã‚?ã?«ä»•様を作ã?£ã?¦ã?„ã‚‹ã?®ã?§ã€?keyã?¯ã?™ã?¹ã?¦Stringã?¨ã?¿ã?ªã?™ã?“ã?¨ã?«ã?—ã?¦ã?„ã‚‹.}
   
   @throws Exception
   */
  public void test23_keyMustBeString() throws Exception {
    JSONTokenizer tokenizer = new JSONTokenizer("{aaa:123}");
    assertEquals(TokenType.START_BRACE, tokenizer.currentTokenType());
    assertEquals(TokenType.COLON, tokenizer.nextToken());
    assertEquals("aaa", tokenizer.getToken());
    assertEquals(TokenType.END_BRACE, tokenizer.nextToken());
    assertEquals("123", tokenizer.getToken());
    assertEquals(TokenType.EOF, tokenizer.nextToken());
  }

  public void test24_keyvalue_nestOnlyNestObject() throws Exception {
    JSONTokenizer tokenizer = new JSONTokenizer("{\"bbb\":{\"b1\":true}}");
    assertEquals(TokenType.START_BRACE, tokenizer.currentTokenType());
    assertEquals("{\"bbb\":{\"b1\":true}}", tokenizer.getToken());
    assertEquals(TokenType.COLON, tokenizer.nextToken());
    assertEquals("bbb", tokenizer.getToken());
    assertEquals(TokenType.START_BRACE, tokenizer.nextToken());
    assertEquals("{\"b1\":true}}", tokenizer.getToken());
    assertEquals(TokenType.COLON, tokenizer.nextToken());
    assertEquals("b1", tokenizer.getToken());
    assertEquals(TokenType.END_BRACE, tokenizer.nextToken());
    assertEquals("true", tokenizer.getToken());
    assertEquals(TokenType.END_BRACE, tokenizer.nextToken());
  }

  public void test25_keyvalue_nestOnlyNestObject2() throws Exception {
    JSONTokenizer tokenizer = new JSONTokenizer(
        "{\"bbb\":{\"b1\":true}, \"vvv\":null}");
    assertEquals(TokenType.START_BRACE, tokenizer.currentTokenType());
    assertEquals("{\"bbb\":{\"b1\":true}, \"vvv\":null}", tokenizer
        .getToken());
    assertEquals(TokenType.COLON, tokenizer.nextToken());
    assertEquals("bbb", tokenizer.getToken());
    {
      assertEquals(TokenType.START_BRACE, tokenizer.nextToken());
      assertEquals("{\"b1\":true}, \"vvv\":null}", tokenizer.getToken());
      assertEquals(TokenType.COLON, tokenizer.nextToken());
      assertEquals("b1", tokenizer.getToken());
      assertEquals(TokenType.END_BRACE, tokenizer.nextToken());
      assertEquals("true", tokenizer.getToken());
    }
    assertEquals(TokenType.END_COMMA, tokenizer.nextToken());
    assertEquals(TokenType.COLON, tokenizer.nextToken());
    assertEquals("vvv", tokenizer.getToken());
    assertEquals(TokenType.END_BRACE, tokenizer.nextToken());
    assertEquals("null", tokenizer.getToken());
    assertEquals(TokenType.EOF, tokenizer.nextToken());
  }

  public void test26_keyvalue_deepNest1() throws Exception {
    final String json = "{\"bbb\":{\"dates\":{\"from\":20090101,\n \"to\":20091231},\t\"b1\":true}, \"vvv\":null}";
    JSONTokenizer tokenizer = new JSONTokenizer(json);
    assertEquals(TokenType.START_BRACE, tokenizer.currentTokenType());
    assertEquals(json, tokenizer.getToken());
    assertEquals(TokenType.COLON, tokenizer.nextToken());
    assertEquals("bbb", tokenizer.getToken());
    {
      assertEquals(TokenType.START_BRACE, tokenizer.nextToken());
      assertEquals(
          "{\"dates\":{\"from\":20090101,\n \"to\":20091231},\t\"b1\":true}, \"vvv\":null}",
          tokenizer.getToken());
      assertEquals(TokenType.COLON, tokenizer.nextToken());
      assertEquals("dates", tokenizer.getToken());
      {
        assertEquals(TokenType.START_BRACE, tokenizer.nextToken());
        assertEquals(
            "{\"from\":20090101,\n \"to\":20091231},\t\"b1\":true}, \"vvv\":null}",
            tokenizer.getToken());
        assertEquals(TokenType.COLON, tokenizer.nextToken());
        assertEquals("from", tokenizer.getToken());
        assertEquals(TokenType.COMMA, tokenizer.nextToken());
        assertEquals("20090101", tokenizer.getToken());
        assertEquals(TokenType.COLON, tokenizer.nextToken());
        assertEquals("to", tokenizer.getToken());
        assertEquals(TokenType.END_BRACE, tokenizer.nextToken());
        assertEquals("20091231", tokenizer.getToken());
      }
      assertEquals(TokenType.END_COMMA, tokenizer.nextToken());
      assertEquals(TokenType.COLON, tokenizer.nextToken());
      assertEquals("b1", tokenizer.getToken());
      assertEquals(TokenType.END_BRACE, tokenizer.nextToken());
      assertEquals("true", tokenizer.getToken());
    }
    assertEquals(TokenType.END_COMMA, tokenizer.nextToken());
    assertEquals(TokenType.COLON, tokenizer.nextToken());
    assertEquals("vvv", tokenizer.getToken());
    assertEquals(TokenType.END_BRACE, tokenizer.nextToken());
    assertEquals("null", tokenizer.getToken());
    assertEquals(TokenType.EOF, tokenizer.nextToken());
  }

  public void test27_keyvalue_nest2() throws Exception {
    JSONTokenizer tokenizer = new JSONTokenizer(
        "{\"aaa\":123, \"bbb\":{\"b1\":true},\t\"ccc\":\"fuga\"}");
    assertEquals(TokenType.START_BRACE, tokenizer.currentTokenType());
    assertEquals("{\"aaa\":123, \"bbb\":{\"b1\":true},\t\"ccc\":\"fuga\"}",
        tokenizer.getToken());
    assertEquals(TokenType.COLON, tokenizer.nextToken());
    assertEquals("aaa", tokenizer.getToken());
    assertEquals(TokenType.COMMA, tokenizer.nextToken());
    assertEquals("123", tokenizer.getToken());
    assertEquals(TokenType.COLON, tokenizer.nextToken());
    assertEquals("bbb", tokenizer.getToken());
    {
      assertEquals(TokenType.START_BRACE, tokenizer.nextToken());
      assertEquals("{\"b1\":true},\t\"ccc\":\"fuga\"}", tokenizer
          .getToken());
      assertEquals(TokenType.COLON, tokenizer.nextToken());
      assertEquals("b1", tokenizer.getToken());
      assertEquals(TokenType.END_BRACE, tokenizer.nextToken());
      assertEquals("true", tokenizer.getToken());
    }
    assertEquals(TokenType.END_COMMA, tokenizer.nextToken());
    assertEquals(TokenType.COLON, tokenizer.nextToken());
    assertEquals("ccc", tokenizer.getToken());
    assertEquals(TokenType.END_BRACE, tokenizer.nextToken());
    assertEquals("\"fuga\"", tokenizer.getToken());
    assertEquals(TokenType.EOF, tokenizer.nextToken());
  }

}

   
  














Related examples in the same category
1.JSON Parser
2.String node for JSON
3.Create Object from JSON string
4.Outputing data in JSON format in response to a JSONP request
java2s.com  | Contact Us | Privacy Policy
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.