gpt4 book ai didi

json - 如何使用 F# JsonProvider 从 URL 读取 JSON

转载 作者:行者123 更新时间:2023-12-01 13:34:30 25 4
gpt4 key购买 nike

我在“Why you should use F#”上观看了第 9 channel 的一段视频,从维基百科中提取数据如此简单让我印象深刻。例如,他展示了以下代码,其中列出了神秘博士的不同外观......

[<Literal>]
let url = @"https://en.wikipedia.org/wiki/Doctor_Who"
type DoctorWhoData = HtmlProvider<url>

let data = DoctorWhoData.GetSample()
let app = data.Tables.``Changes of appearance``.Rows

在他打字时,他在最后一行有 Intellisense,这消除了寻找数据时的猜测。

我最近需要从 Google Maps API 中提取一些数据。例如,以下 URL 提取英国邮政编码 SW1A 1AA 的数据(白金汉宫,以防有兴趣!)...

http://maps.google.com/maps/api/geocode/json?address=sw1a+1aa+uk

鉴于数据只是 Json,我认为使用 F# 从中提取信息应该同样容易。但是,我在尝试获取纬度和经度时遇到了困难。

我从以下开始......

type GoogleData = JsonProvider<"http://maps.google.com/maps/api/geocode/json?address=sw1a+1aa+uk">

...但随后在尝试提取数据时遇到了困难。 json 包含一个包含一个条目的数组。其中包含一个 geometry 节点,该节点包含一个保存这两个值的 location 节点。在伪代码中,我会期望做这样的事情......

let lat = GoogleData.GetSample().[0].geometry.location.lat

...但是,这没有用。我在没有 GetSample() 的情况下尝试过,但没有取得更多进展。 Intellisense 向我展示了一些似乎与 Json 完全不匹配的东西... enter image description here

谁能告诉我哪里出错了?我如何找到数据?更重要的是,如何让 Intellisense 帮助我?我设法在 C# 中做到了这一点,但由于我不得不使用动态对象,所以它非常失败,所以没有获得 Intellisense。根据我在该视频中看到的内容,我希望在这里获得 Intellisense。

最佳答案

JSON 响应包含 2 个顶级对象,resultsstatus

{
"results" : [
{
"address_components" : [
{
"long_name" : "SW1A 1AA",
"short_name" : "SW1A 1AA",
"types" : [ "postal_code" ]
//snip
],
"status" : "OK"
}

lat 和 long 在 results 下,所以你需要从 .GetSample()

let lat = GoogleData.GetSample().Results.[0].Geometry.Location.Lat

要使用示例数据以外的数据,请使用 Load 函数:

let honley = GoogleData.Load "http://maps.google.com/maps/api/geocode/json?address=honley+uk"
let honley_latlong = honley.Results.[0].Geometry.Location

//{
// "lat": 53.602267,
// "lng": -1.794173
//}
printfn "%A" honley_latlong

关于json - 如何使用 F# JsonProvider 从 URL 读取 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44485027/

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