簡體   English   中英

JToken:獲取原始/原始 JSON 值

[英]JToken: Get raw/original JSON value

有沒有辦法從JToken獲取原始/原始 JSON 值?

問題:

var data = JObject.Parse(@"{
    ""SimpleDate"":""2012-05-18T00:00:00Z"",
    ""PatternDate"":""2012-11-07T00:00:00Z""
}");

var value = data["SimpleDate"].Value<string>();

value現在是05/18/2012 00:00:00但我需要原始字符串2012-05-18T00:00:00Z

有沒有辦法獲得這個原始值? 此外,我無法更改JObject的創建方式(例如更改設置),因為它作為參數傳遞到我的類中...

(參考:原始 NJsonSchema 問題

您無法獲得原始字符串,日期字符串被識別並轉換為JsonReader本身內部的DateTime結構。 如果您這樣做,您可以看到這一點:

Console.WriteLine(((JValue)data["SimpleDate"]).Value.GetType()); // Prints System.DateTime

但是,您可以通過執行以下操作以ISO 8601格式提取日期:

var value = JsonConvert.SerializeObject(data["SimpleDate"]);
// value is "2012-05-18T00:00:00Z"

這將始終以JValue JSON 的字符串格式輸出JValue 由於您的原始日期采用這種格式,因此這可能會滿足您的需求。

(老實說,我很驚訝JValue.ToString()以非 ISO 格式輸出日期,因為JObject.ToString()確實以 ISO 格式輸出包含日期。)

如果您能夠在讀取JObject更改設置,則可以使用JsonSerializerSettings.DateParseHandling = DateParseHandling.None禁用DateTime識別:

var settings = new JsonSerializerSettings { DateParseHandling = DateParseHandling.None };
var data = JsonConvert.DeserializeObject<JObject>(@"{
    ""SimpleDate"":""2012-05-18T00:00:00Z"",
    ""PatternDate"":""2012-11-07T00:00:00Z""
}", settings);

var value = data["SimpleDate"].Value<string>();

Debug.WriteLine(value); // Outputs 2012-05-18T00:00:00Z

JObject.Parse()沒有采用JsonSerializerSettings ,因此請使用DeserializeObject 此設置最終會傳播到JsonReader.DateParseHandling

相關 Newtonsoft 文檔:

我在Json.NET Disable the deserialization on DateTime 中找到了一個解決方案:

JsonReader reader = new JsonTextReader(new StringReader(j1.ToString()));
reader.DateParseHandling = DateParseHandling.None;
JObject o = JObject.Load(reader);

另一種方法 - 行得通 - 正則表達式

SimpleDate(?:.*):(?:.*?)\"([0-9|-]{1,}T[0-9|:]+Z)

它是一種提取您要查找的數據的正則表達式模式 - 您只需要字符串,所以這里是 . 它不是 JSON 解析方法 - 但它確實提取了字符串。

這是它如何工作的示例

暫無
暫無

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

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