2016-11-25 53 views
1

我想分析.txt文件中包含的JSON結構化數據。我正確安裝了FSharp.Data庫,並設置了路徑(我仍在學習相對路徑)。即使如此,它拋出了一個我無法解釋的錯誤。一個簡單的操作關於JSON結構化數據的操作

#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") 

覺得作爲打印標籤collection

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

System.Exception: Not an object 

此操作適用於更小的塊數據從tutorial這樣的那些中的所有內容。不幸的是,我仍然無法使它在更大的數據庫上工作(因爲它很重要,請在我的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