示例#1
0
        public static JSONNode Parse(string json)
        {
            int i = 0;

            if (json[i] == '{')
            {
                return(JSONParser.automatoObject(json, ref i));
            }
            else if (json[i] == '[')
            {
                return(JSONParser.automatoArray(json, ref i));
            }
            else
            {
                throw new FormatException();
            }
        }
示例#2
0
        private static JSONNode automatoObject(string str, ref int index)
        {
            JSONNode json   = new JSONObject();
            int      estado = 0;
            string   key    = "";

            while (index < str.Length)
            {
                if ((str[index] == '{' || str[index] == ',') && estado == 0)
                {
                    estado = 1;
                }
                else if (str[index] == ':' && estado == 0)
                {
                    estado = 2;
                }
                else if (str[index] == '"' && (estado == 1 || estado == 2))
                {
                    if (estado == 1)
                    {
                        key = JSONParser.automatoString(str, ref index);
                    }
                    else if (estado == 2)
                    {
                        json.Add(key, new JSONData(JSONParser.automatoString(str, ref index)));
                        key = "";
                    }
                    estado = 0;
                }
                else if (str[index] == 't' && estado == 2)
                {
                    json.Add(key, new JSONData(JSONParser.automatoTrue(str, ref index)));
                    key    = "";
                    estado = 0;
                }
                else if (str[index] == 'f' && estado == 2)
                {
                    json.Add(key, new JSONData(JSONParser.automatoFalse(str, ref index)));
                    key    = "";
                    estado = 0;
                }
                else if (str[index] == 'n' && estado == 2)
                {
                    json.Add(key, new JSONData(JSONParser.automatoNull(str, ref index)));
                    key    = "";
                    estado = 0;
                }
                else if (((Char.GetNumericValue(str[index]) >= 0 && Char.GetNumericValue(str[index]) <= 9) || str[index] == '-') && estado == 2)
                {
                    json.Add(key, new JSONData(JSONParser.automatoNumber(str, ref index)));
                    key    = "";
                    estado = 0;
                }
                else if (str[index] == '[' && estado == 2)
                {
                    json.Add(key, JSONParser.automatoArray(str, ref index));
                    key    = "";
                    estado = 0;
                }
                else if (str[index] == '{' && estado == 2)
                {
                    json.Add(key, JSONParser.automatoObject(str, ref index));
                    key    = "";
                    estado = 0;
                }
                else if (str[index] == '}' && estado == 0)
                {
                    break;
                }
                else if (str[index] == ' ')
                {
                }
                else
                {
                    throw new FormatException();
                }
                index++;
            }
            return(json);
        }
示例#3
0
        private static JSONNode automatoArray(string str, ref int index)
        {
            JSONNode json   = new JSONArray();
            int      estado = 0;

            while (index < str.Length)
            {
                if ((str[index] == '[' || str[index] == ',') && estado == 0)
                {
                    estado = 1;
                }
                else if (str[index] == '"' && estado == 1)
                {
                    json.Add(new JSONData(JSONParser.automatoString(str, ref index)));
                    estado = 0;
                }
                else if (str[index] == 't' && estado == 1)
                {
                    json.Add(new JSONData(JSONParser.automatoTrue(str, ref index)));
                    estado = 0;
                }
                else if (str[index] == 'f' && estado == 1)
                {
                    json.Add(new JSONData(JSONParser.automatoFalse(str, ref index)));
                    estado = 0;
                }
                else if (str[index] == 'n' && estado == 1)
                {
                    json.Add(new JSONData(automatoNull(str, ref index)));
                    estado = 0;
                }
                else if ((char.IsNumber(str[index]) || str[index] == '-') && estado == 1)
                {
                    json.Add(new JSONData(JSONParser.automatoNumber(str, ref index)));
                    estado = 0;
                }
                else if (str[index] == '[' && estado == 1)
                {
                    json.Add(JSONParser.automatoArray(str, ref index));
                    estado = 0;
                }
                else if (str[index] == '{' && estado == 1)
                {
                    json.Add(JSONParser.automatoObject(str, ref index));
                }
                else if (str[index] == ']' && estado == 0)
                {
                    break;
                }
                else if (str[index] == ' ')
                {
                }
                else
                {
                    throw new FormatException();
                }
                index++;
            }

            return(json);
        }