一尘不染

Flutter-删除飞镖中的转义序列

flutter

要将API响应字符串解码为JSON,json.decode()效果很好。
这将解析一个类似于

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

但就我而言,响应以序列化形式出现,例如:

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

json.decode() 将无法正常工作。

在Java中,我曾StringEscapeUtils.unescapeJson()遇到过同样的问题。
我搜索了Dart,但找不到如何对字符串中的字符进行转义。

编辑:
假设密钥数据的值为abc"de
So,则其对应的JSON为{"data":"abc\"de"}
。因此,在序列化期间,此json字符串被转义以给出{\"data\":\"abc\\\"de\"}响应,由API发送。
因此,我的意图是删除转义序列,以便可以获取字符串{"data":"abc\"de"},稍后将使用对其进行解码json.decode()。删除转义序列是使用StringEscapeUtils.unescapeJson()Java
完成的。


阅读 1039

收藏
2020-08-13

共1个答案

一尘不染

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
}
2020-08-13