我试图从一个网站拉JSON数据,我在迭代它返回的对象时遇到了一些麻烦。有人能帮助导航这个结构吗?我对它不统一感到困惑。
using (var httpClient = new HttpClient())
{
httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", "myToken");
httpClient.BaseAddress = new Uri("https://app.website.com/data/");
HttpResponseMessage response = httpClient.GetAsync("getData.json?item=myItem").Result;
response.EnsureSuccessStatusCode();
dynamic result = JsonConvert.DeserializeObject(response.Content.ReadAsStringAsync().Result);
Console.WriteLine("Result: " + result);
dynamic jsonArray = result.results;
foreach (var item in jsonArray.items)
{
Console.WriteLine(item.date1);
}
}
字符串
下面是我处理的JSON数组。我的目标是遍历item
并获得所有的date1
和date2
值。我不需要其他任何东西。
{
"results": {
"copyright": "Copyright",
"items": [{
"info": {
"longname": "XXX",
"shortname": "YYY"
},
"item": [{
"date1": "2022-01-01",
"date2": "2022-01-05",
}, {
"date1": "2022-04-01",
"date2": "2021-04-07",
}],
"key": {
"keyName": "AAA",
"keySym": "BBB",
},
"symString": "BBB"
}],
"count": 1
}
}
型
1条答案
按热度按时间xlpyo6sf1#
使用
dynamic
会让你自己做额外的工作,因为你会失去智能感知和编译时类型检查。Json.NET为dynamic
返回的底层类型通常是JToken
的某个子类型,所以完成任务的最简单方法是将其转换为JToken
并使用SelectTokens()
,如下所示:字符串
哪个指纹
型
备注:
SelectTokens()
的查询字符串"results.items[*].item[*]"
是一个JSONPath查询,其中包含用于选择"items"
数组和嵌套"item"
数组中所有项的通配符。DateOnly
在.NET 6中引入。在早期版本中使用DateTime
。httpClient.GetAsync(url).Result
有时会导致死锁,详细信息请参阅 An async/await example that causes a deadlock。如果发生这种情况,请考虑将代码转换为异步,或参阅 What's the "right way" to use HttpClient synchronously?。演示小提琴here