首页 > 编程知识 正文

json扁平化处理

时间:2023-05-05 00:46:51 阅读:255991 作者:2938

一个层级结构很深的json对象

下面的代码是JSON扁平化的帮助类:

声明:

由于层级的json对象中名字可能会有重复,所有扁平化时key值带上了父级的key使用一个key的list列表,来判断是否有重复的键插入,如果键已经存在,则跳过。如果对于每个字段的信息都不可或缺,可以再判断有重复键的时候,修改键值名称,就能正常获取插入值了。

代码如下:

using System.Collections.Generic;using Newtonsoft.Json.Linq;namespace MongoDBAccess{ public class JsonHelper { private readonly List<string> _keys = new List<string>(); public string ToFlat(JObject obj, string parent) { string result = null; foreach (var item in obj) { if (typeof(JObject) == item.Value.GetType()) { var child = (JObject)item.Value; var tmp = ToFlat(child, item.Key); result += tmp; } else if (typeof(JArray) == item.Value.GetType()) { var jarray = (JArray)item.Value; if (jarray.Count == 0 && !_keys.Contains(item.Key)) { result += string.Format("'{0}':{1},", item.Key, new JArray()); _keys.Add(item.Key); } else { foreach (var jitem in jarray) { if (jitem.HasValues) { var jchild = (JObject)jitem; string tmp = ToFlat(jchild, item.Key); result += tmp; } else if(!_keys.Contains(item.Key)) { result += string.Format("'{0}':{1},", item.Key, new JArray(){jitem}); _keys.Add(item.Key); } } } } else { var value = item.Value ?? " "; if (string.IsNullOrEmpty(parent) && !_keys.Contains(item.Key)) { result += string.Format("'{0}':"{1}",", item.Key, value); _keys.Add(item.Key); } else if (!_keys.Contains(parent + "_" + item.Key)) { result += string.Format("'{0}_{1}':'{2}',", parent, item.Key, value); _keys.Add(parent + "_" + item.Key); } } } return result; } }}


版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。