Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.04.2019, 15:40   #1
BLACK_RAIN
Форумчанин
 
Регистрация: 13.02.2012
Сообщений: 867
По умолчанию непонятный JSON (не парсится)

В ответ от сервера приходит JSON-файл со следующим содержанием:
Код:
{
    "token": "{\"authorization\":{\"forbidden\":false,\"reason\":\"\"},\"chansub\":{\"restricted_bitrates\":[\"160p30\",\"360p30\",\"480p30\",\"720p30\",\"720p60\",\"audio_only\",\"chunked\"]},\"device_id\":\"f5c750dc6abb384c\",\"expires\":1555483246,\"https_required\":false,\"privileged\":false,\"user_id\":null,\"version\":2,\"vod_id\":410955948}",
    "sig": "ae729bcb291b60e386dcf8b4d665b360a98111a7",
    "expires_at": "2019-04-17T06:40:46Z"
}
другие JSON''ы без проблем парсятся через TJSONObject, а этот какой-то непонятный - не парсится. Как его парсить, кроме как вручную?
Конкретно нужно прочитать массив restricted_bitrates.
BLACK_RAIN вне форума Ответить с цитированием
Старый 17.04.2019, 15:42   #2
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Что тут непонятного? Достаньте строку из token и парсите (убрав экранирующие символы если остались).
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 17.04.2019, 15:48   #3
BLACK_RAIN
Форумчанин
 
Регистрация: 13.02.2012
Сообщений: 867
По умолчанию

всё, дошло. Зря тему создал
надо было так сделать:
Код:
    r := StringReplace(r, '\"', '', [rfReplaceAll]);
а я так делал:
Код:
    r := StringReplace(r, '\', '', [rfReplaceAll]);
BLACK_RAIN вне форума Ответить с цитированием
Старый 18.04.2019, 09:17   #4
BLACK_RAIN
Форумчанин
 
Регистрация: 13.02.2012
Сообщений: 867
По умолчанию

и всё-равно он не парсится.
не удается распарсить содержимое token.
если удалить все слэши с кавычками, то не парсится token. Если удалить просто все слеши, а кавычки оставить, то не парсится совсем.

Последний раз редактировалось BLACK_RAIN; 18.04.2019 в 09:22.
BLACK_RAIN вне форума Ответить с цитированием
Старый 18.04.2019, 09:33   #5
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Все парсится без \. Кавычки естественно не надо убирать.
https://jsonformatter.curiousconcept.com/

Смотрите что у вас в r, выведите в файл.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 18.04.2019, 10:08   #6
BLACK_RAIN
Форумчанин
 
Регистрация: 13.02.2012
Сообщений: 867
По умолчанию

Код:
  if https_Get(<запрос>, s) = 200 then
  begin
    s := StringReplace(s, '\', '', [rfReplaceAll]);
    json2 := TJSONObject.ParseJSONValue(s) as TJSONObject; //здесь json2 = nil. не парсится
  end;
содержимое переменной s:
Код:
{"token":"{"authorization":{"forbidden":false,"reason":""},"chansub":{"restricted_bitrates":["160p30","360p30","480p30","720p60","audio_only","chunked"]},"device_id":null,"expires":1555642412,"https_required":false,"privileged":false,"user_id":null,"version":2,"vod_id":411950229}","sig":"9d25f73cda3c03338c1c5333e87182d8e74d77ff","expires_at":"2019-04-19T02:53:32Z"}
а если убрать кавычки, весь json тогда парсится, а token нет.

Последний раз редактировалось BLACK_RAIN; 18.04.2019 в 10:10.
BLACK_RAIN вне форума Ответить с цитированием
Старый 18.04.2019, 10:32   #7
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
Достаньте строку из token
↑↑↑↑↑↑
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 18.04.2019, 10:50   #8
BLACK_RAIN
Форумчанин
 
Регистрация: 13.02.2012
Сообщений: 867
По умолчанию

код:
Код:
    s := StringReplace(s, '\"', '', [rfReplaceAll]);
    json2 := TJSONObject.ParseJSONValue(s) as TJSONObject;
    t := json2.Get('token').JsonValue.Value;
    Clipboard.AsText := t;
    json2 := TJSONObject.ParseJSONValue(t) as TJSONObject; //nil
переменная t:
Код:
{authorization:{forbidden:false,reason:},chansub:{restricted_bitrates:[160p30,360p30,480p30,720p60,audio_only,chunked]},device_id:null,expires:1555645192,https_required:false,privileged:false,user_id:null,version:2,vod_id:411950229}
напоминаю еще раз, что без убирания кавычек вообще не парсится
BLACK_RAIN вне форума Ответить с цитированием
Старый 18.04.2019, 11:04   #9
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Так не убирайте в s ничего.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 18.04.2019, 11:18   #10
BLACK_RAIN
Форумчанин
 
Регистрация: 13.02.2012
Сообщений: 867
По умолчанию

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
Так не убирайте в s ничего.
начнем с начала.
как распарсить содержимое token?
я, наверное, что-то не так делаю.
Код:
{"authorization":{"forbidden":false,"reason":""},"chansub":{"restricted_bitrates":["160p30","360p30","480p30","720p60","audio_only","chunked"]},"device_id":null,"expires":1555647360,"https_required":false,"privileged":false,"user_id":null,"version":2,"vod_id":411950229}
как распарсить строку такого вида?

Последний раз редактировалось BLACK_RAIN; 18.04.2019 в 11:24.
BLACK_RAIN вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с JSON (System.JSON) nibufep Общие вопросы Delphi 3 19.04.2016 18:21
JSON Exception [org.apache.json] spectrum988 Помощь студентам 3 11.12.2015 09:25
Проблема с парсингом ссылок, парсится одна и та же ссылка! FleXik Общие вопросы Delphi 15 02.11.2012 20:52
Криво парсится текст INSectoID Общие вопросы Delphi 5 14.07.2011 20:55