我有以下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();
当然我省略了错误检查。