/// <summary> /// Use JsonValue as JsonObject and get JsonValue item by key. /// return null if not found key. /// </summary> public JsonValue AsObjectGet(string key) { DebugTool.Assert(this.type == JsonType.Object, "JsonValue type is not Object !"); var dict = this.objectValue as Dictionary <string, JsonValue>; if (dict.TryGetValue(key, out JsonValue jsonValue)) { return(jsonValue); } return(null); }
/// <summary> /// Parse JsonArray. /// </summary> private static JsonValue ParseArray(Data data) { var jsonArray = new List <JsonValue>(Json.ArrayInitCapacity); // skip '[' ++data.index; do { SkipWhiteSpace(data); if (data.json[data.index] == ']') { break; } // add JsonArray item jsonArray.Add(ParseValue(data)); SkipWhiteSpace(data); if (data.json[data.index] == ',') { ++data.index; } else { DebugTool.Assert ( data.json[data.index] == ']', "Json ParseArray error, char '{0}' should be ']' ", data.json[data.index] ); break; } }while (true); // skip ']' ++data.index; return(new JsonValue(JsonType.Array, jsonArray)); }
/// <summary> /// Get JsonValue as bool. /// </summary> public bool AsBool() { DebugTool.Assert(this.type == JsonType.Bool, "JsonValue type is not Bool !"); return(this.numberValue > 0.0f); }
/// <summary> /// Get JsonValue as int. /// </summary> public int AsInt() { DebugTool.Assert(this.type == JsonType.Number, "JsonValue type is not Number !"); return((int)this.numberValue); }
/// <summary> /// Get JsonValue as float. /// </summary> public float AsFloat() { DebugTool.Assert(this.type == JsonType.Number, "JsonValue type is not Number !"); return(this.numberValue); }
//---------------------------------------------------------------------------------------------------------------------- #region Other Json value API /// <summary> /// Get JsonValue as string. /// </summary> public string AsString() { DebugTool.Assert(this.type == JsonType.String, "JsonValue type is not String !"); return(this.objectValue as string); }
/// <summary> /// Use JsonValue as JsonArray and get JsonValue item by index. /// </summary> public JsonValue AsArrayGet(int index) { DebugTool.Assert(this.type == JsonType.Array, "JsonValue type is not Array !"); return((this.objectValue as List <JsonValue>)[index]); }
//---------------------------------------------------------------------------------------------------------------------- #region JsonArray API /// <summary> /// Use JsonValue as JsonArray. /// </summary> public List <JsonValue> AsArray() { DebugTool.Assert(this.type == JsonType.Array, "JsonValue type is not Array !"); return(this.objectValue as List <JsonValue>); }
//---------------------------------------------------------------------------------------------------------------------- #region JsonObject API /// <summary> /// Use JsonValue as JsonObject. /// </summary> public Dictionary <string, JsonValue> AsObject() { DebugTool.Assert(this.type == JsonType.Object, "JsonValue type is not Object !"); return(this.objectValue as Dictionary <string, JsonValue>); }
/// <summary> /// Parse JsonObject. /// </summary> private static JsonValue ParseObject(Data data) { var jsonObject = new Dictionary <string, JsonValue>(Json.ObjectInitCapacity); // skip '{' ++data.index; do { SkipWhiteSpace(data); if (data.json[data.index] == '}') { break; } DebugTool.Assert ( data.json[data.index] == '"', "Json ParseObject error, char '{0}' should be '\"' ", data.json[data.index] ); // get object key string var key = GetString(data); SkipWhiteSpace(data); DebugTool.Assert ( data.json[data.index] == ':', "Json ParseObject error, after key = {0}, char '{1}' should be ':' ", key, data.json[data.index] ); // skip ':' ++data.index; // set JsonObject key and value jsonObject.Add(key, ParseValue(data)); SkipWhiteSpace(data); if (data.json[data.index] == ',') { ++data.index; } else { DebugTool.Assert ( data.json[data.index] == '}', "Json ParseObject error, after key = {0}, char '{1}' should be '}' ", key, data.json[data.index] ); break; } }while (true); // skip '}' ++data.index; return(new JsonValue(JsonType.Object, jsonObject)); }