コード例 #1
0
ファイル: JSONData.cs プロジェクト: nobuyukinyuu/PhaseEngine
        static JSONDataItem GetJSONObject(JSONTokeniser tokeniser)
        {
            JSONObject   jsonObject = new JSONObject();
            JSONDataItem data1;
            JSONDataItem data2;

            //Check if this is an empty definition
            data1 = JSONData.GetJSONDataItem(tokeniser);
            if (data1.dataType == JSONDataType.JSON_NON_DATA && ((JSONNonData)data1).value.tokenType == JSONToken.TOKEN_CLOSE_CURLY)
            {
                //End of object
                return(jsonObject);
            }

            while (true)
            {
                if (data1.dataType != JSONDataType.JSON_STRING)
                {
                    return(new JSONDataError("Expected item name, got " + data1, tokeniser.GetCurrentSectionString()));
                }

                data2 = JSONData.GetJSONDataItem(tokeniser);

                if (data2.dataType != JSONDataType.JSON_NON_DATA)
                {
                    return(new JSONDataError("Expected ':', got " + data2, tokeniser.GetCurrentSectionString()));
                }
                else
                {
                    var d2 = (JSONNonData)data2;
                    if (d2.value.tokenType != JSONToken.TOKEN_COLON)
                    {
                        return(new JSONDataError("Expected ':', got " + d2.value, tokeniser.GetCurrentSectionString()));
                    }
                }

                data2 = JSONData.GetJSONDataItem(tokeniser);

                if (data2.dataType == JSONDataType.JSON_ERROR)
                {
                    return(data2);
                }
                else if (data2.dataType == JSONDataType.JSON_NON_DATA)
                {
                    return(new JSONDataError("Expected item value, got " + ((JSONNonData)data2).value, tokeniser.GetCurrentSectionString()));
                }

                jsonObject.AddItem(((JSONString)data1).value, data2);
                data2 = JSONData.GetJSONDataItem(tokeniser);

                if (data2.dataType != JSONDataType.JSON_NON_DATA)
                {
                    return(new JSONDataError("Expected ',' or '}', got " + data2, tokeniser.GetCurrentSectionString()));
                }
                else
                {
                    if (((JSONNonData)data2).value.tokenType == JSONToken.TOKEN_CLOSE_CURLY)
                    {
                        break; //End of Object
                    }
                    else if (((JSONNonData)data2).value.tokenType != JSONToken.TOKEN_COMMA)
                    {
                        return(new JSONDataError("Expected ',' or '}', got " + ((JSONNonData)data2).value, tokeniser.GetCurrentSectionString()));
                    }
                }
                data1 = JSONData.GetJSONDataItem(tokeniser);
            }

            return(jsonObject);
        }