json转换为键值对

 public class JsonParser
    {

        private static Dictionary<string, string> lst_KeyValueData = null;

        public static Dictionary<string, string> SplitJsonStringToKeyValuePairs(string jsonStr)
        {
            char jsonBeginToken = '{';
            char jsonEndToken = '}';

            if (string.IsNullOrEmpty(jsonStr))
            {
                return null;
            }
            //验证json字符串格式
            if (jsonStr[0] != jsonBeginToken || jsonStr[jsonStr.Length - 1] != jsonEndToken)
            {
                throw new ArgumentException("非法的Json字符串!");
            }

            lst_KeyValueData = new Dictionary<string, string>();

            JObject jobj = new JObject();

            // 转换为json对象
            jobj = JObject.Parse(jsonStr);
            ParseJsonProperties(jobj);

            return lst_KeyValueData;

        }


        private static void ParseJsonProperties(JObject jObject)
        {
            IEnumerable<JProperty> jObject_Properties = jObject.Properties();

            JTokenType[] validPropertyValueTypes = { JTokenType.String, JTokenType.Integer, JTokenType.Float, JTokenType.Boolean, JTokenType.Null, JTokenType.Date, JTokenType.Bytes, JTokenType.Guid, JTokenType.Uri, JTokenType.TimeSpan };
            List<JTokenType> propertyTypes = new List<JTokenType>(validPropertyValueTypes);

            JTokenType[] validObjectTypes = { JTokenType.String, JTokenType.Array, JTokenType.Object };
            List<JTokenType> objectTypes = new List<JTokenType>(validObjectTypes);



            foreach (JProperty property in jObject_Properties)
            {


                try
                {
                    if (propertyTypes.Contains(property.Value.Type))
                    {
                        ParseJsonKeyValue(property, property.Name.ToString());
                    }
                    else if (objectTypes.Contains(property.Value.Type))
                    {
                        if (property.Value.Type == JTokenType.Array && property.Value.HasValues)
                        {
                            ParseJsonArray(property);
                        }

                        if (property.Value.Type == JTokenType.Object)
                        {
                            JObject jo = new JObject();
                            jo = JObject.Parse(property.Value.ToString());
                            string paramName = property.Name.ToString();

                            lst_KeyValueData.Add(paramName, property.Value.ToString());

                            if (jo.HasValues)
                            {
                                ParseJsonProperties(jo);
                            }

                        }
                    }
                }
                catch (Exception ex)
                {
                    throw;
                }

            }

        }

        private static void ParseJsonKeyValue(JProperty item, string paramName)
        {
            lst_KeyValueData.Add(paramName, item.Value.ToString());
        }

        private static void ParseJsonArray(JProperty item)
        {
            JArray jArray = (JArray)item.Value;

            string paramName = item.Name.ToString();
            lst_KeyValueData.Add(paramName, item.Value.ToString());



            try
            {
                for (int i = 0; i < jArray.Count; i++)
                {

                    paramName = i.ToString();
                    lst_KeyValueData.Add(paramName, jArray.Values().ElementAt(i).ToString());

                    JObject jo = new JObject();
                    jo = JObject.Parse(jArray[i].ToString());
                    IEnumerable<JProperty> jArrayEnum = jo.Properties();

                    foreach (JProperty jaItem in jArrayEnum)
                    {
                        var paramNameWithJaItem = jaItem.Name.ToString();

                        var itemValue = jaItem.Value.ToString(Formatting.None);
                        if (itemValue.Length > 0)
                        {
                            switch (itemValue.Substring(0, 1))
                            {
                                case "[":
                                    ParseJsonArray(jaItem);
                                    break;
                                case "{":
                                    JObject joObject = new JObject();
                                    joObject = JObject.Parse(itemValue);

                                    ParseJsonProperties(joObject);
                                    break;
                                default:
                                    ParseJsonKeyValue(jaItem, paramNameWithJaItem);
                                    break;
                            }
                        }
                    }
                } 

            }
            catch (Exception ex)
            {
                throw;
            }
        }
    }
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值