如何使用F#JsonProvider从URL读取JSON
当时我正在观看第9频道关于“”的视频,从维基百科上获取数据是多么容易,这给我留下了深刻的印象。例如,他展示了下列代码,列出了Who博士的不同外貌如何使用F#JsonProvider从URL读取JSON,json,f#,type-providers,Json,F#,Type Providers,当时我正在观看第9频道关于“”的视频,从维基百科上获取数据是多么容易,这给我留下了深刻的印象。例如,他展示了下列代码,列出了Who博士的不同外貌 [<Literal>] let url = @"https://en.wikipedia.org/wiki/Doctor_Who" type DoctorWhoData = HtmlProvider<url> let data = DoctorWhoData.GetSample() let app = data.Tables.
[<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
…但是,这不起作用。我在没有GetSample()的情况下尝试了它,但没有取得更多进展。Intellisense向我展示了与Json完全不匹配的东西
有谁能告诉我哪里出了问题?如何查找数据?更重要的是,我如何让Intellisense帮助我?我在C#中成功地做到了这一点,但由于我必须使用动态对象,所以无法获得Intellisense。根据我在视频中看到的内容,我希望在这里获得Intellisense。JSON响应包含两个顶级对象,
结果
和状态
{
"results" : [
{
"address_components" : [
{
"long_name" : "SW1A 1AA",
"short_name" : "SW1A 1AA",
"types" : [ "postal_code" ]
//snip
],
"status" : "OK"
}
lat和long在结果下
,因此您需要从.GetSample()
要使用样本数据以外的数据,请使用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
谢谢你,我没注意到你的状态也是顶级的!除了调用整行两次之外,是否有一种简单的方法可以一次性获得lat和long,例如
let(lat,lng)=?
你可以定义一个辅助函数let ll2tp(ll:GoogleData.Northeast)=(ll.lat,ll.lng)
然后let(lat,lng)=honley.Results。[0]。Geometry.Location |>ll2tp
谢谢。我不确定这样做是否真的能收获很多,但值得知道。再次感谢你的帮助。
{
"results" : [
{
"address_components" : [
{
"long_name" : "SW1A 1AA",
"short_name" : "SW1A 1AA",
"types" : [ "postal_code" ]
//snip
],
"status" : "OK"
}
let lat = GoogleData.GetSample().Results.[0].Geometry.Location.Lat
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