4 * License : The MIT License
5 * Copyright(c) 2009 olyutorskii
8 package jp.sourceforge.jovsonz;
10 import java.io.IOException;
11 import java.io.Reader;
16 public final class Json {
19 public static final String MIME_TYPE = "application/json";
27 throw new AssertionError();
31 * JSON最上位構造から文字出力を開始する。
33 * @param topValue OBJECT型かARRAY型のValue
34 * @throws NullPointerException 引数がnull
35 * @throws JsVisitException 何らかの理由で処理中断
36 * @throws IOException 出力エラー
38 public static void dumpJson(Appendable appout, JsComposition topValue)
39 throws NullPointerException,
42 if(appout == null || topValue == null){
43 throw new NullPointerException();
46 JsonAppender appender = new JsonAppender(appout);
49 topValue.traverse(appender);
50 }catch(JsVisitException e){
51 assert appender.hasIOException();
52 throw appender.getIOException();
59 * JSONの各種Valueを文字ソースから読み取る。
62 * 0個以上連続するホワイトスペースと共にソースの終わりに達したときはnull
63 * @throws IOException 入力エラー
64 * @throws JsParseException パースエラー
66 static JsValue parseValue(JsonSource source)
67 throws IOException, JsParseException{
68 source.skipWhiteSpace();
69 if( ! source.hasMore() ) return null;
72 result = JsObject .parseObject (source);
73 if(result != null) return result;
74 result = JsArray .parseArray (source);
75 if(result != null) return result;
76 result = JsString .parseString (source);
77 if(result != null) return result;
78 result = JsNull .parseNull (source);
79 if(result != null) return result;
80 result = JsBoolean.parseBoolean(source);
81 if(result != null) return result;
82 result = JsNumber .parseNumber (source);
85 throw new JsParseException(JsParseException.ERRMSG_INVALIDTOKEN,
86 source.getLineNumber() );
93 * JSONの最上位構造を文字ソースから読み取る。
94 * @param source 文字入力ソース
95 * @return JSON最上位構造。OBJECT型かARRAY型のいずれか。
96 * 入力が0個以上のホワイトスペースのみで埋められていた場合はnull。
97 * @throws IOException 入力エラー
98 * @throws JsParseException パースエラー
100 private static JsComposition parseJson(JsonSource source)
101 throws IOException, JsParseException{
102 JsValue topValue = parseValue(source);
103 if(topValue == null) return null;
105 if( ! (topValue instanceof JsComposition) ){
106 throw new JsParseException(JsParseException.ERRMSG_INVALIDROOT,
107 source.getLineNumber() );
109 JsComposition result = (JsComposition) topValue;
115 * JSONの最上位構造を文字リーダから読み取る。
116 * @param source 文字入力リーダ
117 * @return JSON最上位構造。OBJECT型かARRAY型のいずれか。
118 * 入力が0個以上のホワイトスペースのみで埋められていた場合はnull。
119 * @throws IOException 入力エラー
120 * @throws JsParseException パースエラー
122 public static JsComposition parseJson(Reader source)
123 throws IOException, JsParseException{
124 JsonSource jsonSource = new JsonSource(source);
125 return parseJson(jsonSource);