Ejemplo n.º 1
0
        public override void Add(SimpleJSONNode aItem)
        {
            var tmp = new SimpleJSONArray();

            tmp.Add(aItem);
            Set(tmp);
        }
Ejemplo n.º 2
0
        public override void Add(string aKey, SimpleJSONNode aItem)
        {
            var tmp = new SimpleJSONClass();

            tmp.Add(aKey, aItem);
            Set(tmp);
        }
Ejemplo n.º 3
0
        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);
        }
Ejemplo n.º 4
0
        public override SimpleJSONNode Remove(string aKey)
        {
            if (!dict.ContainsKey(aKey))
            {
                return(null);
            }
            SimpleJSONNode tmp = dict[aKey];

            dict.Remove(aKey);
            return(tmp);
        }
Ejemplo n.º 5
0
 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.
 }
Ejemplo n.º 6
0
 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);
     }
 }
Ejemplo n.º 7
0
 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);
     }
 }
Ejemplo n.º 8
0
 public override SimpleJSONNode Remove(SimpleJSONNode aNode)
 {
     m_List.Remove(aNode);
     return(aNode);
 }
Ejemplo n.º 9
0
 public override void Add(string aKey, SimpleJSONNode aItem)
 {
     m_List.Add(aItem);
 }
Ejemplo n.º 10
0
        //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);
        }
Ejemplo n.º 11
0
 public virtual SimpleJSONNode Remove(SimpleJSONNode aNode)
 {
     return(aNode);
 }
Ejemplo n.º 12
0
 public static SimpleJSONNode Parse(string aJSON)
 {
     return(SimpleJSONNode.Parse(aJSON));
 }
Ejemplo n.º 13
0
 public virtual void Add(SimpleJSONNode aItem)
 {
     Add("", aItem);
 }
Ejemplo n.º 14
0
 public SimpleJSONLazyCreator(SimpleJSONNode aNode, string aKey)
 {
     m_Node = aNode;
     m_Key  = aKey;
 }
Ejemplo n.º 15
0
 public SimpleJSONLazyCreator(SimpleJSONNode aNode)
 {
     m_Node = aNode;
     m_Key  = null;
 }
Ejemplo n.º 16
0
 public virtual void Add(string aKey, SimpleJSONNode aItem)
 {
 }