2015-10-10 6 views
5

それはとても厳格に判断してはいけない... SO上の私の最初の質問です=)F#データ:JSONパーサー。 JsonExtensions

を使用して通常すべての私の質問は、()=、それらの多くは、私を信じて)chat roomsにtechout。

最近、私たちはRosettaCodeについて話しています。そして私はいくつかのタスクコードをFに補完することを考えました

どれかがJSONです。

"F#Data:JSON Parser"の使用が考えられます。だから私の質問はそれに関連している。

このコードではうまく機能:

open FSharp.Data 
open FSharp.Data.JsonExtensions 

type Person = {ID: int; Name:string} 

let json = """[ { "ID": 1, "Name": "First" }, { "ID": 2, "Name": "Second" }]""" 
json |> printfn "%s" 

match JsonValue.Parse(json) with 
| JsonValue.Array(x) -> 
    x |> Array.map(fun x -> {ID = System.Int32.Parse((x?ID).ToString()); Name = (string x?Name)}) 
| _ -> failwith "fail json" 
|> Array.iter(fun x -> printfn "%i %s" x.ID x.Name) 

印刷:

[ { "ID": 1, "Name": "First" }, { "ID": 2, "Name": "Second" }] 
1 "First" 
2 "Second" 

しかし、それ

{ID = System.Int32.Parse((x?ID).ToString()); Name = (string x?Name)} 

は良い見ていません。

This私は、JsonExtensionsについて

を読んで私は

{ID = (x?ID.AsInteger()) ; Name = (x?Name.AsString()) } 

を使用するとき、私はコンパイルエラーを取得:

  • フィールド、コンストラクタ、または "AsIntegerは"

  • を定義されていません。
  • フィールド、コンストラクタ、または "AsString"はnです。 JsonExtensionsを使用する方法:OTは

    不思議

を定義し、事は、私が "オープンFSharp.Data.JsonExtensions" を通じて

enter image description here

を、アクセシビリティを見ること質問ですか?

答えて

3

最小限の例でこれを再現しようとしましたが、エラーは発生しません。次の最小限のサンプルを試すことができますか?

#r "...../FSharp.Data.dll" 
open FSharp.Data.JsonExtensions 
open FSharp.Data 

JsonValue.Parse("A").AsArray() 
|> Array.map (fun a -> a?ID.AsInteger()) 

私は(エディタの制限です)a?ID.の自動補完を得ることはありませんが、それは罰金コンパイルします。

を返さない?演算子の別の実装をインポートする別のopen宣言があった場合、これが機能しない唯一の理由があります。

APIは型プロバイダを使用するのと同じくらい面白いとは限りません。可能であれば、代わりに型プロバイダを使用します(低いレベルのAPIは、 JSON再帰的に)。

+0

はい、エラーは同じです –

+0

http://i.stack.imgur.com/l9Rz5。png –

+0

これは非常に混乱しています。どのバージョンのF#+ VSを使用していますか? –

関連する問題