Скачиваю страницу видео с рутуба и достаю из неё JSON. А там куча escape-символов, переносов строки и прочая хрень. Как это распарсить в Newtonsoft JSON
?
Пример файла: {\\r\\n \\\"@context\\\" : \\\"http://schema.org\\\",\\r\\n \\\"@id\\\" : \\\" - Pastebin.com
И, чего-то, Replace()
не работает
string t = File.ReadAllText("h:\\1.json");
t = t.Replace("\\\\r\\\\n", "").Replace("\\\\", "");
JObject j = JObject.Parse(t);
Ну через регулярку вначале привести к нормальному виду.
(\+r) заменить на человечий \r
ну и так далее для всех символов. а потом уже в парсер гнать.
AlexP
(Alex P.)
21.Июль.2022 07:54:05
#4
string data = "";
using (StreamReader strr = new StreamReader(new FileStream(@"C:\Users\Downloads\rc5aeC0u.txt", FileMode.Open, FileAccess.Read), Encoding.UTF8))
{
data = strr.ReadToEnd();
}
data = Regex.Replace(data, "\\\\+r", "\r");
data = Regex.Replace(data, "\\\\+n", "\n");
data = Regex.Replace(data, "\\\\+t", "\t");
data = Regex.Replace(data, "\\\\+\"", "\"");
using (StreamWriter strw = new StreamWriter(new FileStream(@"C:\Users\Downloads\rc5aeC0u_out.txt", FileMode.Create, FileAccess.Write), Encoding.Default))
{
strw.Write(data);
}
Чо-та от этого строка никак не меняется
string t = File.ReadAllText("h:\\1.json");
t = Regex.Unescape(t); //не меняется
JObject j = JObject.Parse(t);
Ошибка
Вызвано исключение: "Newtonsoft.Json.JsonReaderException" в Newtonsoft.Json.dll
Необработанное исключение типа "Newtonsoft.Json.JsonReaderException" в Newtonsoft.Json.dll
Invalid property identifier character: \. Path '', line 1, position 1.
WorldMaster:
data = Regex.Replace(data, "\\\\+r", "\r");
data = Regex.Replace(data, "\\\\+n", "\n");
data = Regex.Replace(data, "\\\\+t", "\t");
data = Regex.Replace(data, "\\\\+\"", "\"");
После этого выяснилось, что у них там JSON какой-то поломаный Это как так вообще? Или это я криво скопипастил? Ну-ка ща ещё раз
Ну может быть где то надо убрать лишние кавычки. Надо предметно посмотреть и посчитать слеши и догадаться что они обозначают.
Короче. Если копировать из этого окна
то вижуалка добавляет кучу эскейпов. Если начать их убирать, то JSON может сломаться.
А в оригинале там всё норм.
Ничего она не добавляет. Просто символ переноса каретки отображается как \r
Если нажать просмотр то он покажет правильно.
Но он всё-равно не парсится, вот с такой ошибкой:
Вызвано исключение: "Newtonsoft.Json.JsonReaderException" в Newtonsoft.Json.dll
Необработанное исключение типа "Newtonsoft.Json.JsonReaderException" в Newtonsoft.Json.dll
Bad JSON escape sequence: \x. Path 'video.entities.cef16f69b228bd7d1019cc6479ca92e2.video.html', line 1, position 13623.
ему теперь эта фигня не нравится:
"html": "\x3ciframe width\x3d\"720\" height\x3d\"405\" src\x3d\"https://rutube.ru/play/embed/8152538\" frameborder\x3d\"0\" webkitAllowFullScreen mozallowfullscreen allowfullscreen allow\x3d\"encrypted-media\"\x3e\x3c/iframe\x3e",
Кстати, через полуофициальное (скрытое) API эта строчка выглядит так:
"html": "<iframe width=\"720\" height=\"405\" src=\"https://rutube.ru/embed/8152538\" frameborder=\"0\" webkitAllowFullScreen mozallowfullscreen allowfullscreen allow=\"encrypted-media\"></iframe>",
и парсится нормально. Но там они даты-время не завезли
BlackRain666:
\x3d
Это же тоже символ. Можно также организовать поиск через регулярку и заменить на соответствующий символ с этим кодом.