알 수없는 JSON 문자열을 구문 분석하여 특정 키/값 쌍을 찾기 위해 작은 재귀 C# 응용 프로그램을 만들었습니다. Newtonsoft.Json.dll
을 사용했습니다. 작은 JSON 문자열에서도 정상적으로 작동하지만 JSON이 더 큰 경우 시간이 오래 걸립니다. 3.5KB의 JSON 파일과 15K + 회선은 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