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)); }
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)); }
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)); }
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)); }
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); } }