public override void Add(SimpleJSONNode aItem) { var tmp = new SimpleJSONArray(); tmp.Add(aItem); Set(tmp); }
public override void Add(string aKey, SimpleJSONNode aItem) { var tmp = new SimpleJSONClass(); tmp.Add(aKey, aItem); Set(tmp); }
public override SimpleJSONNode Remove(int aIndex) { if (aIndex < 0 || aIndex >= m_List.Count) { return(null); } SimpleJSONNode tmp = m_List[aIndex]; m_List.RemoveAt(aIndex); return(tmp); }
public override SimpleJSONNode Remove(string aKey) { if (!dict.ContainsKey(aKey)) { return(null); } SimpleJSONNode tmp = dict[aKey]; dict.Remove(aKey); return(tmp); }
private void Set(SimpleJSONNode aVal) { if (m_Key == null) { m_Node.Add(aVal); } else { m_Node.Add(m_Key, aVal); } m_Node = null; // Be GC friendly. }
public override SimpleJSONNode Remove(SimpleJSONNode aNode) { try { var item = dict.Where(k => k.Value == aNode).First(); dict.Remove(item.Key); return(aNode); } catch { return(null); } }
public override void Add(string aKey, SimpleJSONNode aItem) { if (!string.IsNullOrEmpty(aKey)) { if (dict.ContainsKey(aKey)) { dict[aKey] = aItem; } else { dict.Add(aKey, aItem); } } else { dict.Add(Guid.NewGuid().ToString(), aItem); } }
public override SimpleJSONNode Remove(SimpleJSONNode aNode) { m_List.Remove(aNode); return(aNode); }
public override void Add(string aKey, SimpleJSONNode aItem) { m_List.Add(aItem); }
//Modified to be more type-sensitive for use with Moback public static SimpleJSONNode Parse(string aJSON) { Stack <SimpleJSONNode> stack = new Stack <SimpleJSONNode>(); SimpleJSONNode ctx = null; int i = 0; string Token = ""; string TokenName = ""; bool QuoteMode = false; bool LastTokenHadQuotes = false; //Added for context-dependent parsing of variables in MoBack bool LastTokenHadDecimal = false; while (i < aJSON.Length) { switch (aJSON[i]) { case '{': if (QuoteMode) { Token += aJSON[i]; break; } stack.Push(new SimpleJSONClass()); if (ctx != null) { TokenName = TokenName.Trim(); if (ctx is SimpleJSONArray) { ctx.Add(stack.Peek()); } else if (TokenName != "") { ctx.Add(TokenName, stack.Peek()); } LastTokenHadQuotes = false; LastTokenHadDecimal = false; } TokenName = ""; Token = ""; ctx = stack.Peek(); break; case '[': if (QuoteMode) { Token += aJSON[i]; break; } stack.Push(new SimpleJSONArray()); if (ctx != null) { TokenName = TokenName.Trim(); if (ctx is SimpleJSONArray) { ctx.Add(stack.Peek()); } else if (TokenName != "") { ctx.Add(TokenName, stack.Peek()); } LastTokenHadQuotes = false; LastTokenHadDecimal = false; } TokenName = ""; Token = ""; ctx = stack.Peek(); break; case '}': case ']': if (QuoteMode) { Token += aJSON[i]; break; } if (stack.Count == 0) { throw new Exception("JSON Parse: Too many closing brackets"); } stack.Pop(); if (Token != "") { TokenName = TokenName.Trim(); if (LastTokenHadQuotes) { if (ctx is SimpleJSONArray) { ctx.Add(Token); } else if (TokenName != "") { ctx.Add(TokenName, Token); } LastTokenHadQuotes = false; } else { SimpleJSONNode data = null; //check for number, double vs. float really has to be decided globally because there's no real way to tell from a string if ((Token[0] >= '0' && Token[0] <= '9') || Token[0] == '-') { if (LastTokenHadDecimal) { if (SimpleJSON.assumeDoublePrecisionFloatingPoint) { double d; if (double.TryParse(Token, out d)) { data = d; } else { data = Token; //give up and treat as string } } else { float f; if (float.TryParse(Token, out f)) { data = f; } else { data = Token; //give up and treat as string } } LastTokenHadDecimal = false; } else { int j; if (int.TryParse(Token, out j)) { data = j; } else { data = Token; //give up and treat as string } } } else { //assume is bool bool b; if (bool.TryParse(Token, out b)) { data = b; } else { data = Token; //give up and treat as string } } if (ctx is SimpleJSONArray) { ctx.Add(data); } else if (TokenName != "") { ctx.Add(TokenName, data); } } } TokenName = ""; Token = ""; if (stack.Count > 0) { ctx = stack.Peek(); } break; case ':': if (QuoteMode) { Token += aJSON[i]; break; } TokenName = Token; Token = ""; LastTokenHadQuotes = false; LastTokenHadDecimal = false; break; case '"': LastTokenHadQuotes = QuoteMode; //note that this is efecitvely just set to true when exiting quote mode QuoteMode ^= true; break; case ',': if (QuoteMode) { Token += aJSON[i]; break; } if (Token != "") { if (LastTokenHadQuotes) { if (ctx is SimpleJSONArray) { ctx.Add(Token); } else if (TokenName != "") { ctx.Add(TokenName, Token); } LastTokenHadQuotes = false; } else { SimpleJSONNode data = null; //check for number, simplify to double if ((Token[0] >= '0' && Token[0] <= '9') || Token[0] == '-') { if (LastTokenHadDecimal) { if (SimpleJSON.assumeDoublePrecisionFloatingPoint) { double d; if (double.TryParse(Token, out d)) { data = d; } else { data = Token; //give up and treat as string } } else { float f; if (float.TryParse(Token, out f)) { data = f; } else { data = Token; //give up and treat as string } } LastTokenHadDecimal = false; } else { int j; if (int.TryParse(Token, out j)) { data = j; } else { data = Token; //give up and treat as string } } } else { //assume is bool bool b; if (bool.TryParse(Token, out b)) { data = b; } else { data = Token; //give up and treat as string } } if (ctx is SimpleJSONArray) { ctx.Add(data); } else if (TokenName != "") { ctx.Add(TokenName, data); } } } TokenName = ""; Token = ""; break; case '.': if (!QuoteMode) { LastTokenHadDecimal = true; } Token += aJSON[i]; break; case '\r': case '\n': break; case ' ': case '\t': if (QuoteMode) { Token += aJSON[i]; } break; case '\\': ++i; if (QuoteMode) { char C = aJSON[i]; switch (C) { case 't': Token += '\t'; break; case 'r': Token += '\r'; break; case 'n': Token += '\n'; break; case 'b': Token += '\b'; break; case 'f': Token += '\f'; break; case 'u': { string s = aJSON.Substring(i + 1, 4); Token += (char)int.Parse(s, System.Globalization.NumberStyles.AllowHexSpecifier); i += 4; break; } default: Token += C; break; } } break; default: Token += aJSON[i]; break; } ++i; } if (QuoteMode) { throw new Exception("JSON Parse: Quotation marks seems to be messed up."); } return(ctx); }
public virtual SimpleJSONNode Remove(SimpleJSONNode aNode) { return(aNode); }
public static SimpleJSONNode Parse(string aJSON) { return(SimpleJSONNode.Parse(aJSON)); }
public virtual void Add(SimpleJSONNode aItem) { Add("", aItem); }
public SimpleJSONLazyCreator(SimpleJSONNode aNode, string aKey) { m_Node = aNode; m_Key = aKey; }
public SimpleJSONLazyCreator(SimpleJSONNode aNode) { m_Node = aNode; m_Key = null; }
public virtual void Add(string aKey, SimpleJSONNode aItem) { }