只有累積,沒有奇蹟

2019年6月4日 星期二

[NET] 檢查字串是否為 Json 格式

前言
在開發時很常使用到 Json 格式作為設定檔,舉例來說在 ASP.NET Core 設定檔預設也是使用 Json 格式,系統開發中也會將一些常用的設定放在 Json 方便調整,在 ASP.NET 讀取 Json 最常用到的是 Json.Net 套件,使用上可以很方便地將字串轉為定義的類別內容,這篇就來分享怎麼用 Json.net 來判斷要轉換的文字字串是否為 Json 格式若有問題歡迎留言一起討論。

代碼
首先先下載 Json.Net 套件,使用前需要透過 nuget 下載 Json.net 
Install-Package Newtonsoft.Json -Version 12.0.2
下列代碼主要是先做檢查輸入字串是否為空與字串前後是否有 {} 與 [] 關鍵字,如果沒有直接不進行 parse 的動作,接著使用 JToken.Parse 加上 try catch 判斷字串為 Json 格式,廢話不多說,直接看代碼
private static bool IsJsonFormat(string value)
{
    if (string.IsNullOrWhiteSpace(value))
        return false;

    if ((value.StartsWith("{") && value.EndsWith("}")) || 
        (value.StartsWith("[") && value.EndsWith("]"))) 
    {
        try
        {
            var obj = JToken.Parse(value);
            return true;
        }
        catch (JsonReaderException)
        {
            return false;
        }
    }

    return false;
}
使用方式相當容易
string jsonText = "{\"statusCode\":400,\"error\":\"Error\",\"errorCode\":\"error_code\",\"message\":\"The Message\"}";
var isJson = IsJsonFormat(jsonText);

Console.WriteLine($"Your input Json Text : {jsonText}");
Console.WriteLine($"IsJsonFormat : {isJson}");
Console.Read();
輸出如下
驗證無誤,準備收工 (?
如果希望更方便使用的話,可以使用擴充方法增加方便性

擴充方法
public static class ExtensionMethods
{
    public static bool IsJsonFormat(this string value)
    {
        if (string.IsNullOrWhiteSpace(value))
            return false;

        if ((value.StartsWith("{") && value.EndsWith("}")) ||
            (value.StartsWith("[") && value.EndsWith("]")))
        {
            try
            {
                var obj = JToken.Parse(value);
                return true;
            }
            catch (JsonReaderException)
            {
                return false;
            }
        }

        return false;
    }
}
使用方式如下
string jsonText = "{\"statusCode\":400,\"error\":\"Error\",\"errorCode\":\"error_code\",\"message\":\"The Message\"}";
jsonText.IsJsonFormat();
// result : true

參考
JToken Class

0 意見:

張貼留言

Copyright © m@rcus 學習筆記 | Powered by Blogger

Design by Anders Noren | Blogger Theme by NewBloggerThemes.com