簡體   English   中英

C#,如何使用Regex驗證JSON

[英]C#, how to validate JSON using Regex

假設給出了JSON字符串,我想使用C#進行驗證。 我們都知道JSON字符串具有以下格式

string jsonStr = {"Id":123,"Value":"asdf","Time":"adf","isGood":false}];

我現在要處理Number,String,Boolean,Null類型。 我可以看到JSON的模式是

{ + " + String + " + : + (Number)|(Boolean)|(" + String + ")|(Null) + , + ... + } + ]
// ... means one or more

我真的是正則表達式的新手,所以我不知道...有人可以幫我嗎?

編輯
抱歉,我沒有使用JSON.NET,也不想使用它。 我發現使用Regex是驗證我的JSON字符串的唯一方法。 如果有任何建議,我會去做。 謝謝

編輯2
我的問題是“如何使用Regex驗證JSON”,而不是“我應該使用Regex驗證JSON”。 你們可能知道公司有自己的政策“不使用第三方資源”。 伙計們我該怎么辦? 我只是不允許使用它。

只是一個想法,為什么不先反序列化數據然后驗證字段:

var serializer = new JavaScriptSerializer();
dynamic obj = serializer.Deserialize(json, typeof(object));

然后您可以驗證:obj.Id,obj.Value,obj.isGood

我將把它放在缺少JSON知識的嘗試的頂部,以便每個人都可以看到:

正則表達式以驗證JSON

基本上,對於每個對此失去理智的人,現代正則表達式實現都比正式的cs正則表達式走得更遠,因此,由於諸如反向引用和遞歸之類的事情,不再局限於僅代表正則語言。 嗯,我們現在可以用正則表達式來匹配非常規語言的東西,我給你講,這很不直觀。



無論如何,我都會把我的嘗試留在這里。

此模式:

 {("\w+":(\d+|"\w+"|true|false|null))+}\]

如果我對您的理解正確,則應該與您的要求相符,但是從憤怒的帖子風暴中,您似乎不應該使用正則表達式。

如果您沒有被迫使用RegEx,而只需要對JSON數據進行語法檢查以進行調試,請嘗試使用在線工具

http://jsonlint.com/

哪個工作正常( 注意:請勿粘貼敏感數據!)。

示例:如果粘貼數據

{
    "Id": 123,
    "Value": "asdf",
    "Time": "adf",
    "isGood": false
}]

您正在得到結果:

解析第6行的錯誤:

...“ isGood”:false}]

------------------------ ^期待'EOF'

如果必須驗證敏感數據,則可以查看源代碼,該源代碼可在GitHub上找到:

https://github.com/arc90/jsonlintdotcom

還有一個純JS版本可用: https : //github.com/zaach/jsonlint


如果您打算進行基於模式的驗證,例如確定JSON數據是否包含正確的數據類型,請查看此處:

https://stackoverflow.com/questions/19544183/validate-json-against-json-schema-c-sharp


注意 RegEx只能解析常規語法 ; 對於沒有上下文和更高上下文的任何操作您都需要一個堆棧(即真正的解析器)。 這就是為什么此處顯示的解決方案使用RegEx的原因-正則表達式通常用於解析數字格式,域名格式,電子郵件地址等。為此,它們做得很好。 對於上述真實解析任務,最好使用真實解析器。

暫無
暫無

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

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