在使用AI工具进行数据获取时,我想让AI给我返回Josn数据,我获取数据后是字符串。字符串的类型是每次返回有规则的,但是上次 和下次返 回的是没有规则的。
所谓的规则是:本次返回的是json字符串是:
{
"id": 1,
"name": "张三",
"username": "zhangsan",
"email": "zhangsan@example.com",
"registration_date": "2023-04-01T12:00:00Z",
"last_login": "2023-04-05T08:30:00Z",
"status": "active"
}
下次返回的数据是:
{
"studentId": "S02",
"name": "韩梅梅",
"age": 8,
"gender": "女"
}
如果这样的数据让你导出excel 或者 csv 你是不是头大了。
基于这样的场景我先到了动态代码Dynamic 下的 ExpandoObject 一个密封类。
ExpandoObject功能是:表示一个对象,其成员可以在运行时动态添加和删除。
而他继承的接口是
ICollection<KeyValuePair<string, object?>>
IEnumerable<KeyValuePair<string, object?>>
IEnumerable, IDictionary<string, object?>
看到这里就知道是一个动态的集合。
没错,我准备把AI返回的数据进行动态接收。
在接收前,AI返回的json数据外会带着一些啰里啰唆的其他话术,这里我用一个正则进行数据清洗。
Match match = Regex.Match(item, @"\[\s*(\{.*?\})\s*\]", RegexOptions.Singleline);
如果你的json是一个字符串集合。可以循环进行清洗。
清洗后的数据我们这样操作。
List<IDictionary<string, object>> translations = new List<IDictionary<string, object>>();
string cleanJsonData = match.Value;
var data = JsonConvert.DeserializeObject<List<ExpandoObject>>(cleanJsonData);
translations.AddRange(data.Select(e => (IDictionary<string, object>)e));
translations 就是我们清洗过后的数据,此时就可以导出csv或者excel数据了。
本文暂时没有评论,来添加一个吧(●'◡'●)