私は小さな再帰C#アプリケーションを作成して、未知のJSON文字列を解析し、Newtonsoft.Json.dll
を使って特定のキー/値のペアを見つけました。小さなJSON文字列ではうまくいきますが、JSONが大きければ時間がかかります:3.5KバイトのJSONファイルでは解析に3分以上かかります。 RegExpを使用して同じファイルを解析すると、1秒で<となります。それはJsonConvert.DeserializeObject()
にかかるのですか?JSON DeserializeObjectが非常に遅い
string json = @"{""origin-of_error"" : ""error_message"",""foo"" : ""bar""}";
static void GetJsonValue (string json, string findStr = "foo")
{
try
{
if (Regex.Match(json, @"^\[", RegexOptions.Multiline).Success)
{
// JSON string Array []
var jArr = JsonConvert.DeserializeObject<List<Object>>(json);
foreach (var jLine in jArr) GetJsonValue(jLine.ToString());
}
else
{
// JSON string KEY:VALUE
var jLog = JsonConvert.DeserializeObject<Dictionary<String, Object>>(json);
foreach (KeyValuePair<string, object> jEntry in jLog)
{
if (jEntry.Key.ToString() == findStr) Console.WriteLine("MATCH:" + jEntry.ToString());
GetJsonValue(jEntry.Value.ToString());
}
}
}
catch { }
}
Regexのマッチをオブジェクトの作成と比較することはできませんが、それはもっと複雑です。あなたは疑問を持っていますか?これはちょうど変装の暴言ですか? – Liam
JSONをここで何度も何度も解析していることに注意してください。 'JObject'にそれを解析して再帰的に調べてみてはどうでしょうか? –
これは簡単な方法でした。そのような時間がかかるとは予想していませんでした。 – kestasj