Как убрать кавычки и символы при декодировании из значения JSON? Флаттер - PullRequest
0 голосов
/ 26 мая 2020

Это код для получения моего токена аутентификации.

Future <String> getToken() async{
    final SharedPreferences prefs = await SharedPreferences.getInstance();
    return prefs.getString('token');

  }

Когда я распечатываю токен, он дает мне это json значение с двойными кавычками.

I/flutter (14710): "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJhdWQiOiIxIiwianRpIjoiZDQzZjFjNWZjZDQxYjIzYzllNGU2ZWIyZjQ1M2FmZDgwOTJiNGZmNDAyYjI0OTBmM2RiYTUzMTgzYTU2ODZjNTNiNzVmMDY3ZmIzMmNjMjUiLCJpYXQiOjE1OTA0MDg2NjksIm5iZiI6MTU5MDQwODY2OSwiZXhwIjoxNjIxOTQ0NjY5LCJzdWIiOiIxIiwic2NvcGVzIjpbXX0.3YYdR8P1_XzK--VLAwT5gxmkyLZPMuvQhzQQ5OOl_nv0jriPwFY9sqHdL_wiqpAA5vtgBOnyAwZ2kSI_BgDzsKZzY2vMVa47Tyuz87uEFZ7-aHYvNY_r4T_gIkwAuLwc8qN2kuytFjEtuq-iQUiWgEzp5y2n3BDlzXZ7rZi5Xp1_y_6_ysII9RQtX37LuDFt3AIRbYLGDBAilPHi0iJB_jQqWqH8J1mUzCsArj2VuSel7kERqpwFz-SwOOS4EA7CaoOuOlleOpynBalTK9vm1vU3n81K4TAgNq-Mg9CsiFMVQULURdmku7-2gcc3VS8vBXo9OlEgzqmGjLDvIy8_-LCcwuoSVC2DL2t2PIcNUDKQsBu1GBPQ99wzHcnyEpvjVRkg7v4zQWtlIUY6PcLjNf_vnfuXuCERAwBwjS86T7n8ZscfmVVebISVvAKyDN6YhW41hnUw-AZYRLtuhbE8Z48V0tLfLw9aeVr-Qe2mlaYj0LqGYlqBLqUtRl9HSaA9USa6tQ1KQJvF5_6JPcIBJuSkEsrY9n1xhnCViAiyFVF4XWbtToULn69B2UtoXw1X8y_Wek_T7D7t0fi5KWKj8QHO6yI3ZIWViERS2K6n7mnL_3z_7CNeewVxmqMXNdeWl7yPmAMzUAv6z7pWm-R1Qpv7tNVj4-FfQAk3vOm56hE"

Вот как я использовал токен, который вы получаете от api, но он не работает.

     Future<Model> ViewWelcomeScreen() async {
    String url = '$baseurl/post/20';
   ApiService().getToken().then((value){
      token = value;
    });
    final response = await http.get(url, headers: {
      'Content-type': 'application/json',
      'Accept': 'application/json',
      'Authorization': 'Bearer $token'
    });
    print(token);
    if (response.statusCode == 200) {
      var test = json.decode(response.body);
      var jsonResponse = test['data'];
      return Model.fromJson(jsonResponse);
    } else {
      throw Exception('Failed to load data');
    }
  }



Ответы [ 2 ]

0 голосов
/ 26 мая 2020
Код
Future<Model> ViewWelcomeScreen() async {
    String url = '$baseurl/post/20';
   ApiService().getToken().then((value){
      token = value;
    });
    final response = await http.get(url, headers: {
      'Content-type': 'application/json',
      'Accept': 'application/json',
      'Authorization': 'Bearer $token'
    });
    print(token);
    if (response.statusCode == 200) {
      var test = json.decode(response.body);
      var jsonResponse = test['data'];
      return Model.fromJson(jsonResponse);
    } else {
      throw Exception('Failed to load data');
    }
  }

в каком-то смысле неправильный, думаю, у вас есть asyn c, а затем оба в одной функции, почему?

ApiService().getToken().then((value){
      token = value;
    });

здесь вы говорите, что я хочу токен, а я не не нужно ждать, тогда вы go и попытаетесь использовать эту переменную

final response = await http.get(url, headers: {
      'Content-type': 'application/json',
      'Accept': 'application/json',
      'Authorization': 'Bearer $token'
    });

см. в flutter каждый asyn c - ожидание работает как событие l oop в javascript

  1. Я пишу asyn c
  2. нормальный код
  3. используя then в 1. функция
  4. зависимый код в 1. as asyn c -wait

что будет на выходе? событие l oop сначала будет иметь 1,2,3,4 как функции asyn c, оно будет запускаться 1, и как только оно получит нормальный код, оно будет работать нормально, но если оно получит, то поймет, что этот результат не важно, поэтому позвольте мне сделать остальную работу и вернусь к выполнению третьей, а затем функции, чтобы она запустила 4, а затем третью функцию

, но вы хотите токен, поэтому

ApiService().getToken().then((value){
      token = value;
    });

замените это на

token = await ApiService().getToken();

вашей службе может потребоваться токен, и поэтому это не код состояния 200.

0 голосов
/ 26 мая 2020

Если вы просто хотите удалить "" из строки, просто используйте метод replaceAll

String string = '"foo"';

//Output: 'foo'
string.replaceAll('"', '');
...