2014-01-30 36 views
0

我正在使用JSON.NET去序列化一個json文件,很少有一個文件中的字段在其值之後可能沒有尾隨逗號。這導致一個excpetion,因爲它期望一個逗號。我正在查看JSON.NET文檔,並找不到我可以指定仍然解析該字段的選項。JSON.NET在丟失逗號時拋出異常

JSON.NET中有一種方法可以不用擔心尾隨逗號嗎?

下面,如果讓我們說如果一個字段在其末尾不包含逗號,則拋出異常。

{ 
     "Rack": "0015", 
     "SampleType": "Specimen", 
     "SID": "HBSAG-PC", 
     "Position": 4, 
     "AssayNumber": 149, 
    "AssayVersion": 5, 
     "Dilution": 1, 
     "Replicate": 5 
    "Track": 1, 
    "Lane": 1, 
     "ReagentMasterLot": "08559LF00", 
     "ReagentSerialNumber": 65000, 
     "Comment": "HBSAG Q IIPC" 
    } 
+3

那麼缺失的逗號不在最後一個元素;它處於倒數第二個元素。所以,即使JSON.NET有一個選項可以忽略尾隨逗號,並且它應該拋出一個異常,那也不是有效的Json。 –

+3

這就像是要求XML解析器解析無效的XML。如果可行,我會感到驚訝。 JSON的目的是計算機生成 - 如果生成的文件被破壞,修復它。 –

+2

您的示例輸入不是JSON。你爲什麼期望JSON解析器能夠爲你提供有意義的輸出? –

回答

0

JSON spec要求對象中的名稱/值對在它們之間有逗號。 (另見JSON.org)。如果逗號缺失,則JSON無效。因此,任何符合標準的解析器都將拋出一個異常,包括JSON.Net。沒有選項可以忽略缺失的逗號。您需要修復源代碼中的JSON。

1

您發佈的JSON無效。不是因爲在端部後面的逗號,但在中心

{ 
    "Rack": "0015", 
    "SampleType": "Specimen", 
    "SID": "HBSAG-PC", 
    "Position": 4, 
    "AssayNumber": 149, 
    "AssayVersion": 5, 
    "Dilution": 1, 
    "Replicate": 5 
    "Track": 1, 
    "Lane": 1, 
    "ReagentMasterLot": "08559LF00", 
    "ReagentSerialNumber": 65000, 
    "Comment": "HBSAG Q IIPC" 
} 

缺少逗號的這條線"Replicate": 5"Track": 1,缺少「5」和「軌道」之間的逗號。

修正後的Json如下:

{ 
    "Rack": "0015", 
    "SampleType": "Specimen", 
    "SID": "HBSAG-PC", 
    "Position": 4, 
    "AssayNumber": 149, 
    "AssayVersion": 5, 
    "Dilution": 1, 
    "Replicate": 5, 
    "Track": 1, 
    "Lane": 1, 
    "ReagentMasterLot": "08559LF00", 
    "ReagentSerialNumber": 65000, 
    "Comment": "HBSAG Q IIPC" 
} 

您可以JSONLint驗證您的JSON。

+1

OP已經知道它*'看到字段「複製」,如果我刪除逗號後它的值5我會得到一個例外* * –

+0

@ L.B啊,錯過了。謝謝。 –