簡體   English   中英

JSON解析記錄集合

[英]JSON parsing collection of records

我為此一直苦苦掙扎,我認為我的唱片設計有問題。

我的json如下所示。 我之前將此問題發布為另一個問題的一部分,但沒有得到完整的答案,尤其是對於這一部分。 數組中的每個記錄都是一個對象,該對象的字段名稱為string類型的數據。

JSON

[
    {
        "data": "/publication/a40a5e5c-98b3-45ae-d6a3-924b31d8712a/article/test;version=1521246543034"
    }, 
    {
        "data": "/publication/a40a5e5c-98b3-45ae-d6a3-924b31d8712a/book/test2;version=1520623346891"
    }, 
    {
        "data": "/publication/a40a5e5c-98b3-45ae-d6a3-924b31d8712a/catalog/test3;version=1520623346833"
    }
]

List.fs

open System.Runtime.Serialization

[<DataContract>]
type List= {
    [<field: DataMemberAttribute(Name="data") >]
    Data: string
}

解析JSON

let response = request.GetResponse() :?> HttpWebResponse
use reader = new StreamReader(response.GetResponseStream())
use memoryStream = new MemoryStream(ASCIIEncoding.Default.GetBytes(reader.ReadToEnd())) 
let jsonSerializer = DataContractJsonSerializer(typeof<List[]>)
let result = jsonSerializer.ReadObject(memoryStream) :?> List[]
Debug.WriteLine(sprintf "%A" result)

實際輸出-具有空值

[|
    {Data = null;}; 
    {Data = null;}; 
    {Data = null;}
|]

預期產量

[|
    {Data = "/publication/a40a5e5c-98b3-45ae-d6a3-924b31d8712a/article/test;version=1521246543034";}; 
    {Data = "/publication/a40a5e5c-98b3-45ae-d6a3-924b31d8712a/book/test2;version=1520623346891";}
    {Data = "/publication/a40a5e5c-98b3-45ae-d6a3-924b31d8712a/catalog/test3;version=1520623346833";}
|]

迭代

result 
 > Array.iter (fun x -> Console.WriteLine(x.Href))

我懷疑讀取數據的方式一定有問題。 我試圖重現此問題,並將流中的讀數替換為字符串中的讀數-以便我可以對其進行測試-並且以下各項工作正常(在F#交互式版本14.0.23413.0中):

#r "System.Runtime.Serialization"
open System.IO
open System.Text
open System.Runtime.Serialization
open System.Runtime.Serialization.Json

[<DataContract>]
type List= {
    [<field: DataMemberAttribute(Name="data") >]
    Data: string
}

let reader = new StringReader("""[
    { "data": "/publication/a40a5e5c/article/test;version=1521246543034" }, 
    { "data": "/publication/a40a5e5c/book/test2;version=1520623346891" }, 
    { "data": "/publication/a40a5e5c/catalog/test3;version=1520623346833" } ]""")

let memoryStream = new MemoryStream(ASCIIEncoding.Default.GetBytes(reader.ReadToEnd())) 
let jsonSerializer = DataContractJsonSerializer(typeof<List[]>)
let result = jsonSerializer.ReadObject(memoryStream) :?> List[]
result

您可以檢查輸入的JSON是否確實是您在此處共享的JSON嗎? 為此,請在調用GetBytes之前查看reader.ReadToEnd()返回的內容-我懷疑那里肯定有問題,因為其余的代碼對我來說都很好。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM