2016-11-25 8 views
1

.txtファイルに含まれるJSON構造のデータを解析したいと思います。私は正しくFSharp.Dataライブラリをインストールし、パスを設定しました(私はまだ相対パスを学習しています)。それでも、私は解釈できないというエラーを投げます。この操作は、データtutorialから、このようなものの小さな部分を上の作品のタグcollectionJSON構造のデータの操作

for col in value?collectible do 
    printfn "%s" (col.AsString()) 

System.Exception: Not an object 

のすべての内容を印刷するなどの簡単な操作の

#r "C:/Users/mauri/OneDrive/Programmazione1/Sharpstone/dataAccessManipulation/ 
packages/FSharp.Data.2.3.2/lib/net40/FSharp.Data.dll";; 
open FSharp.Data 
open FSharp.Data.JsonExtensions 
let value = JsonValue.Load("C:/Users/mauri/OneDrive/Programmazione1/Sharpstone/SharpStone/Deck1") 

と思います。残念ながら、私はまだ大きなデータベースで動作させることはできません(視界がかなり重いので、GitHub accountで見つけてください)。そのようなエラーの理由は何ですか?そして、「オブジェクトではない」とはどういう意味ですか?

+0

私はdownvoteについてのフィードバックを、将来それを避けるために持っていますか? – Worice

答えて

3

エラーメッセージ "オブジェクトではありません"は、オブジェクトではなく(フィールドあり)、コレクションなどの何か他のJSONノードのプロパティにアクセスしようとしていることを意味します。 GitHubのからのサンプルデッキを使用して

は、私はvalueコレクションを表し、そうvalue?collectibleを書くことはあなたにこのエラーを与えると仮定 - あなたはコレクションです何かのプロパティcollectibleにアクセスしようとしているため。

(すべてのアーティスト名を印刷する)以下が動作するはず

let value = JsonValue.Load("https://raw.githubusercontent.com/Maurizio-Mario/Sharpstone/master/SharpStone/deck1.txt") 

for col in value.AsArray() do 
    if col?collectible.AsBoolean() then 
    printfn "%s" (col?artist.AsString()) 

サンプルからJSON文書の種類を推測して、公開している、JSONタイプのプロバイダを使用する方がはるかに簡単である、と述べましたタイプセーフな方法ですべてのプロパティ:

type Deck = JsonProvider<"https://raw.githubusercontent.com/Maurizio-Mario/Sharpstone/master/SharpStone/deck1.txt"> 
let value = Deck.GetSamples() 

for col in value do 
    if col.Collectible then 
    printfn "%s" col.Artist 
+0

私は配列についても考えなかった、彼らはまだ私にとって新しいデータ構造です、ありがとう! – Worice