private static LogicJSONArray ParseArray(CharStream stream) { stream.SkipWhitespace(); if (stream.Read() != '[') { LogicJSONParser.ParseError("Not an array"); return(null); } LogicJSONArray jsonArray = new LogicJSONArray(); stream.SkipWhitespace(); char nextChar = stream.NextChar(); if (nextChar != '\0') { if (nextChar == ']') { stream.Read(); return(jsonArray); } while (true) { LogicJSONNode node = LogicJSONParser.ParseValue(stream); if (node != null) { jsonArray.Add(node); stream.SkipWhitespace(); nextChar = stream.Read(); if (nextChar != ',') { if (nextChar == ']') { return(jsonArray); } break; } } else { break; } } } LogicJSONParser.ParseError("Not an array"); return(null); }
public static LogicJSONNode Parse(string json) { return(LogicJSONParser.ParseValue(new CharStream(json))); }
private static LogicJSONObject ParseObject(CharStream stream) { stream.SkipWhitespace(); if (stream.Read() != '{') { LogicJSONParser.ParseError("Not an object"); return(null); } LogicJSONObject jsonObject = new LogicJSONObject(); stream.SkipWhitespace(); char nextChar = stream.NextChar(); if (nextChar != '\0') { if (nextChar == '}') { stream.Read(); return(jsonObject); } while (true) { LogicJSONString key = LogicJSONParser.ParseString(stream); if (key != null) { stream.SkipWhitespace(); nextChar = stream.Read(); if (nextChar != ':') { break; } LogicJSONNode node = LogicJSONParser.ParseValue(stream); if (node != null) { jsonObject.Put(key.GetStringValue(), node); stream.SkipWhitespace(); nextChar = stream.Read(); if (nextChar != ',') { if (nextChar == '}') { return(jsonObject); } break; } } else { break; } } else { break; } } } LogicJSONParser.ParseError("Not an object"); return(null); }