У меня длинная строка, мне нужно вынуть только подстроки, которые находятся между {
и }
, и превратить ее в объект Json
Эта строка
sys=t85,fggh{"Name":"5038.zip","Folder":"Root",,"Download":"services/DownloadFile.ashx?"} dsdfg x=565,dfg
{"Name":"5038.zip","Folder":"Root",,"Download":"services/DownloadFile.ashx?"}dfsdfg567
{"Name":"5038.zip","Folder":"Root",,"Download":"services/DownloadFile.ashx?"}sdfs
У меня есть мусор внутри, поэтому мне нужно извлечь подстроку данных между {
и }
Мой код здесь, но я застрял, я не могу удалить данные, которые я уже сделал.
List<JsonTypeFile> AllFiles = new List<JsonTypeFile>();
int lenght = -1;
while (temp.Length>3)
{
lenght = temp.IndexOf("}") - temp.IndexOf("{");
temp=temp.Substring(temp.IndexOf("{"), lenght+1);
temp.Remove(temp.IndexOf("{"), lenght + 1);
var result = JsonConvert.DeserializeObject<SnSafe.JsonTypeFile>(temp);
AllFiles.Add(result);
}
Если я правильно понимаю, вы просто хотите извлечь что-нибудь между фигурными скобками и игнорировать все остальное.
Следующее регулярное выражение должно позволить вам извлечь эту информацию:
{[^}]*}
(скобка, за которой следуют все, что не является фигурной скобкой, а затем скобкой)
Вы можете извлечь все экземпляры и затем десериализовать их, используя что-то в следующих строках:
using System.Text.RegularExpressions;
...
List<JsonTypeFile> AllFiles = new List<JsonTypeFile>();
foreach(Match match in Regex.Matches(temp, "{[^}]*}"))
{
var result = JsonConvert.DeserializeObject<SnSafe.JsonTypeFile>(match.Value);
AllFiles.Add(result);
}
Вы можете использовать регулярное выражение для этого, но то, что я сделал бы, это использовать .split('{')
для разделения на разделы, пропустить первый раздел и затем использовать.split('}), чтобы найти первую часть каждого раздела.
Вы можете сделать это, используя LINQ
var data = temp
.Split('{')
.Skip(1)
.Select(v => v.Split('}').FirstOrDefault());
Или с помощью регулярного выражения вы можете получить строки следующим образом:
var regex = new Regex("{([^}]*)}");
var matches = regex.Matches(str);
var list = (from object m in matches select m.ToString().Replace("{",string.Empty).Replace("}",string.Empty)).ToList();
var jsonList = JsonConvert.SerializeObject(list);
Переменная str, содержащая вашу строку, как вы указали в своем вопросе.