Flutter - убрать escape-последовательность в дротике - PullRequest
0 голосов
/ 12 октября 2018

Чтобы декодировать строку ответа API в JSON, json.decode() работает нормально.
Это проанализирует строку JSON, аналогичную

{ "Response" : {"Responsecode" : "1" , "Response" : "Success"}}

Но в моем случае ответ приходит в сериализованной форме, например:

{\"Response\" : {\"Responsecode\" : \"0\" , \"Response\" : \"Success\"}}

json.decode() не будет работать.

В Java я использовал StringEscapeUtils.unescapeJson() для той же проблемы.
Я искал Дарт, но не смог найти, какчтобы убрать символы в строке.

Редактировать:
Предположим, значение ключевых данных равно abc"de
Итак, соответствующий ему JSON будет {"data":"abc\"de"}
И, следовательно, во время сериализации этоСтрока json экранируется, чтобы выдать {\"data\":\"abc\\\"de\"} в качестве ответа, отправляемого API.
Итак, я намерен удалить escape-последовательности, чтобы я мог получить строку {"data":"abc\"de"}, которая впоследствии будет декодированаиспользуя json.decode().Удаление escape-последовательностей было сделано с помощью StringEscapeUtils.unescapeJson() в Java.

1 Ответ

0 голосов
/ 15 октября 2018

json.decode также может декодировать отдельные строки, так что вы можете просто вызвать его дважды.В первый раз он вернет вам строку (где были декодированы управляющие символы), а во второй раз он будет декодировать эту строку в карту:

import 'dart:convert';

void main() {
  var a = r'''"{\"Response\" : {\"Responsecode\" : \"0\" , \"Response\" : \"Success\"}}"''';
  var b = json.decode(json.decode(a));
  print(b['Response']['Responsecode']); // 0
  print(b['Response']['Response']); // Success
}
...