jsonjson_0">需求:服务器会传一段json信息过来,这个json信息是不固定的,可能传过来的有一层或者多层数组结构。需要把这些信息全部解析出来,并加以运用。
实现:
最关键的可能就是这个JToken了,这玩意能区分这个value数据是不是数组。
// data = json内容
public static void Main(string data){var detailsDictionary = new Dictionary<string, object>();JObject jsonObject = JObject.Parse(data);foreach (var property in jsonObject.Properties()){if (property.Value is JArray){detailsDictionary[property.Name] = ProcessArray((JArray)property.Value);}else{detailsDictionary[property.Name] = property.Value.ToString();}}// Use the detailsDictionary as neededforeach (var keyValuePair in detailsDictionary){Debug.Log(keyValuePair.Key + " + " + keyValuePair.Value);}}static object ProcessArray(JArray array){var list = new List<object>();foreach (var item in array){if (item is JObject){var nestedDictionary = new Dictionary<string, object>();foreach (var prop in ((JObject)item).Properties()){nestedDictionary[prop.Name] = ProcessToken(prop.Value);}list.Add(nestedDictionary);}else{list.Add(item.ToString());}}return list;}static object ProcessToken(JToken token){switch (token.Type){case JTokenType.Array:return ProcessArray((JArray)token);case JTokenType.Object:var nestedDictionary = new Dictionary<string, object>();foreach (var prop in ((JObject)token).Properties()){nestedDictionary[prop.Name] = ProcessToken(prop.Value);}return nestedDictionary;default:return token.ToString();}}
这样就把json里面的所有数据都解析出来了,然后对其进行操作就可以了。
json格式校验