Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用F#JsonProvider从URL读取JSON_Json_F#_Type Providers - Fatal编程技术网

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

如何使用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.

当时我正在观看第9频道关于“”的视频,从维基百科上获取数据是多么容易,这给我留下了深刻的印象。例如,他展示了下列代码,列出了Who博士的不同外貌

[<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