MathCollection - замена значений

Astraport

Client
Регистрация
01.05.2015
Сообщения
4 943
Благодарностей
4 337
Баллы
113
Я могу получить в MathCollection значения определенных полей JSON. С JSON как объектом тут пока не хочу работать потому что куча вложенных нодов - цикл в цикле и всё в цикле чтобы всё это разобрать.

C#:
string str = "big json";
List<string> list = Regex.Matches(str, @"(?<=""text"":\ "").*?(?="",)").Cast<Match>().Select(m => m.Value).ToList();
Затем обрабатываем полученный список и теперь нужно заменить значения в тех же позициях.
Repalce тут вряд ли поможет.
Можно ли произвести замены на уровне строки? Что можете посоветовать?
 

SergSh

Client
Регистрация
10.05.2017
Сообщения
541
Благодарностей
395
Баллы
63

Astraport

Client
Регистрация
01.05.2015
Сообщения
4 943
Благодарностей
4 337
Баллы
113

doc

Client
Регистрация
30.03.2012
Сообщения
8 607
Благодарностей
4 598
Баллы
113
Вариант 1. У Regex.Replace есть перегрузка, где в третий аргумент можно запихнуть функцию обработки значения
Вариант 2. У каждого объекта Match есть свойства Lenght и Index. Обратный цикл с делитом и инсертом
 
  • Спасибо
Реакции: Astraport
Регистрация
05.06.2019
Сообщения
570
Благодарностей
453
Баллы
63
C#:
string json = project.Variables["json"].Value;

int i = 0;
Func<Match, string> DoSomfing = delegate(Match m)
{
    string value = "новое значение: " + i.ToString();
    i++;
    return value;
};

MatchEvaluator myEvaluator = new MatchEvaluator(DoSomfing);
project.Variables["result"].Value = Regex.Replace(json, @"(?<=""text"":\ "").*?(?="",)", myEvaluator);
 
  • Спасибо
Реакции: BAZAg и Astraport

Astraport

Client
Регистрация
01.05.2015
Сообщения
4 943
Благодарностей
4 337
Баллы
113
Вариант 1. У Regex.Replace есть перегрузка, где в третий аргумент можно запихнуть функцию обработки значения
Вариант 2. У каждого объекта Match есть свойства Lenght и Index. Обратный цикл с делитом и инсертом
Спасибо, попробую.
C#:
string json = project.Variables["json"].Value;

int i = 0;
Func<Match, string> DoSomfing = delegate(Match m)
{
    string value = "новое значение: " + i.ToString();
    i++;
    return value;
};

MatchEvaluator myEvaluator = new MatchEvaluator(DoSomfing);
project.Variables["result"].Value = Regex.Replace(json, @"(?<=""text"":\ "").*?(?="",)", myEvaluator);
Интересная штука, никогда не пользовался. Спасибо.
 

Yuriy Zymlex

Moderator
Команда форума
Регистрация
24.10.2016
Сообщения
6 373
Благодарностей
3 297
Баллы
113
  • Спасибо
Реакции: Astraport

Astraport

Client
Регистрация
01.05.2015
Сообщения
4 943
Благодарностей
4 337
Баллы
113
На основе JSON сгенерить класс и уже в него десериализовать через Newtonsoft.Json
Вот генератор: https://jsonutils.com/

К сожалению, примеры не сохранились.
Ого, тоже интересная тема!
Я правда задачу уже решил регулярками. Надо попробовать тоже самое генерацией класса.
 

Yuriy Zymlex

Moderator
Команда форума
Регистрация
24.10.2016
Сообщения
6 373
Благодарностей
3 297
Баллы
113
  • Спасибо
Реакции: Astraport

SergSh

Client
Регистрация
10.05.2017
Сообщения
541
Благодарностей
395
Баллы
63

Astraport

Client
Регистрация
01.05.2015
Сообщения
4 943
Благодарностей
4 337
Баллы
113
Вот пример, там просто:
Я вчера проверил, тот генератор классов хорошая штука, но в моём json есть ноды с одним и тем же названием, но вложенные друг в друга. Соответственно классы генерит с одинаковыми названиями. Придётся напильником много допиливать.
 

Yuriy Zymlex

Moderator
Команда форума
Регистрация
24.10.2016
Сообщения
6 373
Благодарностей
3 297
Баллы
113
Последнее редактирование:
  • Спасибо
Реакции: Astraport

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)