c# -如何在数组JSON中的对象中获得嵌套值

  • 本文关键字:对象 嵌套 JSON 数组 c# json
  • 更新时间 :
  • 英文 :


我有以下JSON代码检索从:https://urlscan.io/api/v1/search/?q=page.domain:google.nl&size=1

{
"results": [
{
"task": {
"visibility": "public",
"method": "automatic",
"domain": "secureauverificationn.de",
"apexDomain": "secureauverificationn.de",
"time": "2022-07-12T09:01:23.794Z",
"source": "certstream-suspicious",
"uuid": "01a2f1ac-97c5-4377-8d95-b77095e6e78f",
"url": "https://secureauverificationn.de"
},
"stats": {
"uniqIPs": 6,
"uniqCountries": 1,
"dataLength": 493720,
"encodedDataLength": 170314,
"requests": 11
},
"page": {
"country": "DE",
"server": "gws",
"redirected": "off-domain",
"ip": "2a00:1450:4001:82f::2003",
"mimeType": "text/html",
"title": "Google",
"url": "https://www.google.nl/",
"tlsValidDays": 83,
"tlsAgeDays": 35,
"tlsValidFrom": "2022-06-06T10:32:16.000Z",
"domain": "www.google.nl",
"umbrellaRank": 8162,
"apexDomain": "google.nl",
"asnname": "GOOGLE, US",
"asn": "AS15169",
"tlsIssuer": "GTS CA 1C3",
"status": "200"
},
"_id": "01a2f1ac-97c5-4377-8d95-b77095e6e78f",
"sort": [
1657616483794,
"01a2f1ac-97c5-4377-8d95-b77095e6e78f"
],
"result": "https://urlscan.io/api/v1/result/01a2f1ac-97c5-4377-8d95-b77095e6e78f/",
"screenshot": "https://urlscan.io/screenshots/01a2f1ac-97c5-4377-8d95-b77095e6e78f.png"
}
],
"total": 10000,
"took": 13,
"has_more": true
}

我想获得结果数组中的值:

"result": "https://urlscan.io/api/v1/result/01a2f1ac-97c5-4377-8d95-b77095e6e78f/",

这是我已经有了的代码,但是我偶然发现了GetProperty,因为下一个属性是一个数组。

public static async Task<String> GetSearchResults(string url)
{
url = url.Replace("http://", "").Replace("https://", "");
string finalurl = "https://urlscan.io/api/v1/search/?q=page.domain:" + url + "&size=1";
var options = new RestClientOptions(finalurl)
{
ThrowOnAnyError = true,
Timeout = -1
};
var client = new RestClient(options);
var request = new RestRequest(finalurl, Method.Get);
RestResponse response = await client.ExecuteAsync(request);
String output = response.Content;
var JsonObject = JsonDocument.Parse(output);
var RootElement = JsonObject.RootElement;
var NewObject = RootElement.GetProperty("results").ToString();
Console.WriteLine(NewObject);
return output;
}

我的问题是如何以最简单的方式从嵌套数组中检索值。我不想使用Newtonsoft,因为我正在使用System.Text.Json库。

我想要的是:

  • 获取结果值并以最简单的方式将其保存为字符串
  • 一个使用system.text.json
  • 迭代数组或获取数组内值的工作示例

您可以尝试使用dynamic。这样的工作(不是测试IDE):

var root = JsonObject.RootElement as dynamic;
var results = root.results as IEnumerable<dynamic>;
var firstResult = results.FirstOrDefault();
string resultUrl = firstResult.result as string;

更新:

让我们放弃dynamic,然后使用合适的模型类:


record Dto(ResultItem[] results);
record ResultItem(string result);
var deserializedJson = JsonSerializer.Deserialize<Dto>(json);
var firstResult = deserializedJson.results.FirstOrDefault();

当然我省略了错误检查。