Пример #1
0
    private SParseResult _ParseObject()
    {
        if (_nextTokenType == EToken.OPEN_OBJECT)
        {
            _ReadNextToken();
            CJSONValue value = new CJSONValue();
            value.mType = CJSONValue.EValueType.OBJECT;

            while (_nextTokenType == EToken.STRING)
            {
                string key = _nextTokenLexeme;
                _ReadNextToken();

                if (_nextTokenType != EToken.ASSIGNMENT)
                {
                    return(new SParseResult(EParseResult.FAILED));
                }

                _ReadNextToken();

                SParseResult result = _ParseValue();
                if (result.mResult != EParseResult.SUCCESS)
                {
                    return(new SParseResult(EParseResult.FAILED));
                }

                value.mValues[key] = result.mValue;

                if (_nextTokenType == EToken.LIST_SEPARATOR)
                {
                    _ReadNextToken();

                    if (_nextTokenType != EToken.STRING)
                    {
                        return(new SParseResult(EParseResult.FAILED));
                    }
                }
                else
                {
                    break;
                }
            }

            if (_nextTokenType != EToken.CLOSE_OBJECT)
            {
                return(new SParseResult(EParseResult.FAILED));
            }

            _ReadNextToken();

            return(new SParseResult(value));
        }

        return(new SParseResult(EParseResult.NONE));
    }
Пример #2
0
    private SParseResult _ParseArray()
    {
        if (_nextTokenType == EToken.OPEN_ARRAY)
        {
            _ReadNextToken();
            CJSONValue value = new CJSONValue();
            value.mType = CJSONValue.EValueType.ARRAY;

            bool requiredValue = false;
            while (true)
            {
                SParseResult result = _ParseValue();
                if (result.mResult == EParseResult.FAILED)
                {
                    return(result);
                }

                if (requiredValue && result.mResult != EParseResult.SUCCESS)
                {
                    return(new SParseResult(EParseResult.FAILED));
                }

                if (result.mResult == EParseResult.SUCCESS)
                {
                    value.mValues[value.mValues.Count.ToString()] = result.mValue;

                    if (_nextTokenType == EToken.LIST_SEPARATOR)
                    {
                        _ReadNextToken();
                        requiredValue = true;
                    }
                    else
                    {
                        break;
                    }
                }
                else
                {
                    break;
                }
            }

            if (_nextTokenType != EToken.CLOSE_ARRAY)
            {
                return(new SParseResult(EParseResult.FAILED));
            }

            _ReadNextToken();

            return(new SParseResult(value));
        }

        return(new SParseResult(EParseResult.NONE));
    }
Пример #3
0
    private SParseResult _ParseValue()
    {
        if (_nextTokenType == EToken.STRING)
        {
            CJSONValue value = new CJSONValue(_nextTokenLexeme);
            _ReadNextToken();
            return(new SParseResult(value));
        }
        else if (_nextTokenType == EToken.NUMBER)
        {
            CJSONValue value = new CJSONValue(_nextTokenNumber);
            _ReadNextToken();
            return(new SParseResult(value));
        }
        else if (_nextTokenType == EToken.TRUE)
        {
            CJSONValue value = new CJSONValue(true);
            _ReadNextToken();
            return(new SParseResult(value));
        }
        else if (_nextTokenType == EToken.FALSE)
        {
            CJSONValue value = new CJSONValue(false);
            _ReadNextToken();
            return(new SParseResult(value));
        }
        else if (_nextTokenType == EToken.NULL)
        {
            CJSONValue value = new CJSONValue();
            _ReadNextToken();
            return(new SParseResult(value));
        }
        else
        {
            SParseResult result = _ParseObject();
            if (result.mResult != EParseResult.NONE)
            {
                return(result);
            }

            result = _ParseArray();
            if (result.mResult != EParseResult.NONE)
            {
                return(result);
            }
        }

        return(new SParseResult(EParseResult.NONE));
    }
Пример #4
0
    private SParseResult _Parse()
    {
        _ReadNextChar();
        _ReadNextToken();

        SParseResult result = _ParseObject();

        if (result.mResult != EParseResult.NONE)
        {
            return(result);
        }

        result = _ParseArray();
        if (result.mResult != EParseResult.NONE)
        {
            return(result);
        }

        return(new SParseResult(EParseResult.NONE));
    }
Пример #5
0
    public CJSONValue Parse(string FilePath)
    {
        _streamIndex = 0;
        _stream      = File.ReadAllText(FilePath);

        SParseResult result = _Parse();

        if (result.mResult == EParseResult.FAILED)
        {
            int line, column;
            _GetFilePositionFromBufferPosition(_streamIndex, out line, out column);
            Debug.LogError("JSON Parse Error : " + FilePath + ":" + line + ":" + column + " (" + _nextTokenType + ":" + _nextTokenStart + ")");
            return(null);
        }
        else
        {
            //Debug.Log("Parse Complete!");
            //_PrintValue(result.mValue, 0);
            return(result.mValue);
        }
    }