Один из способов сделать это - использовать Newtonsoft.Json. Вы можете разобрать строку в JObject
после того, как вы удалите префикс журнала, который вам не нужен. Я также пошел дальше и удалил пустые строки в вашем вводе. Вот код, который я использовал для этого:
using System;
using System.Linq;
using System.IO;
using Newtonsoft.Json.Linq;
namespace extractingJSONSyslogQuestion
{
class Program
{
static void Main(string[] args)
{
var input = File.ReadAllText("test.txt");
var lines = input.Split("\n");
// Remove blank lines
lines = lines.Where(l => !string.IsNullOrEmpty(l)).ToArray();
foreach(var line in lines) {
// Get rid of log prefix
var data = line.Substring(line.IndexOf("{"));
var json = JObject.Parse(data);
Console.WriteLine(json);
}
}
}
}
Вот файл ввода, который я использовал. Обратите внимание, что я добавил двойные кавычки вокруг строки «detail», чтобы сделать его действительным json:
<14>1 09 30 2019 15:34:37 UTC logsource {"somejson": "thejson", "details": {"detail1": "detail", "detail2": "detail"}}
<14>1 09 30 2019 15:34:37 UTC logsource {"somejson": "thejson", "details": {"detail1": "detail", "detail2": "detail"}}
<14>1 09 30 2019 15:34:37 UTC logsource {"somejson": "thejson", "details": {"detail1": "detail", "detail2": "detail"}
Наконец, вот вывод из моей программы:
{
"somejson": "thejson",
"details": {
"detail1": "detail",
"detail2": "detail"
}
}
{
"somejson": "thejson",
"details": {
"detail1": "detail",
"detail2": "detail"
}
}
{
"somejson": "thejson",
"details": {
"detail1": "detail",
"detail2": "detail"
}
}
Я счастливответьте на любые вопросы о коде более подробно, если вы оставите комментарий.