gpt4 book ai didi

C# 从 JSON 响应创建 Deedle DataFrame

转载 作者:行者123 更新时间:2023-12-05 06:18:14 30 4
gpt4 key购买 nike

我在将此请求的 JSON 响应加载到 Deedle DataFrame 时遇到了一些问题:https://sampleserver6.arcgisonline.com/arcgis/rest/services/Earthquakes_Since1970/FeatureServer/0/query?where=OBJECTID%3C10&returnGeometry=false&f=json

在 JSON 中,我感兴趣的是特性。更具体地说,对于每个功能都有属性——我基本上只想将这些属性的集合加载到 DataFrame 中。在这种特殊情况下,只有一个属性“name”,所以我期望生成的 DataFrame 将有一个列“name”,其中显示了值。

我试过使用 json2csharp 并创建我自己的类,但结果要么没有列标题/值,要么缺少值。我不太确定我做错了什么,或者我是否以正确的方式处理这个问题。我从 Deedle 文档中了解到,应该可以从对象集合创建 DataFrame:https://bluemountaincapital.github.io/Deedle/csharpframe.html#Creating-and-loading-data-frames .当然,使用页面上列出的 Enumerable 示例可以按预期工作。

这是我的代码的相关部分:

        string url = "https://sampleserver6.arcgisonline.com/arcgis/rest/services/Earthquakes_Since1970/FeatureServer/0/query?";
WebClient wc = new WebClient();

wc.QueryString.Add("where", "OBJECTID<10");
wc.QueryString.Add("returnGeometry", "false");
wc.QueryString.Add("f", "json");
var data = wc.UploadValues(url, "POST", wc.QueryString);

var responseString = UnicodeEncoding.UTF8.GetString(data);
JObject o = JObject.Parse(responseString);
dynamic x = JsonConvert.DeserializeObject(responseString);
var testObjList = new List<dynamic>();
foreach (dynamic element in x.features)
{

testObjList.Add(new myClass { name = element.attributes.name});

Console.WriteLine($"{element.attributes.name}");
}


var dfObjects = Frame.FromRecords(testObjList);
dfObjects.Print();
var df = Frame.FromRecords(test);
df.Print(); // No headers or values shown

myClass 就是这样的:

   public class myClass{

public string name { get; set; }

}

任何帮助/指点将不胜感激!

最佳答案

Frame.FromRecords操作依赖于静态类型信息来确定类具有哪些属性。在您的情况下,您将对象列表定义为 List<dynamic> - 这被编译为 Object因此 Deedle 看不到任何成员。

要解决此问题,您需要做的就是将类型定义为 myClass 的列表。对象:

var testObjList = new List<myClass>();

使用匿名类型的更紧凑的方法也可以:

var testObjList =       
((IEnumerable<dynamic>)x.features).Select(element =>
new { name = element.attributes.name });
var dfObjects = Frame.FromRecords(testObjList);

关于C# 从 JSON 响应创建 Deedle DataFrame,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61322745/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com