要将API响应字符串解码为JSON,json.decode()效果很好。 这将解析一个类似于
json.decode()
{ "Response" : {"Responsecode" : "1" , "Response" : "Success"}}
但就我而言,响应以序列化形式出现,例如:
{\"Response\" : {\"Responsecode\" : \"0\" , \"Response\" : \"Success\"}}
json.decode() 将无法正常工作。
在Java中,我曾StringEscapeUtils.unescapeJson()遇到过同样的问题。 我搜索了Dart,但找不到如何对字符串中的字符进行转义。
StringEscapeUtils.unescapeJson()
编辑: 假设密钥数据的值为abc"de So,则其对应的JSON为{"data":"abc\"de"} 。因此,在序列化期间,此json字符串被转义以给出{\"data\":\"abc\\\"de\"}响应,由API发送。 因此,我的意图是删除转义序列,以便可以获取字符串{"data":"abc\"de"},稍后将使用对其进行解码json.decode()。删除转义序列是使用StringEscapeUtils.unescapeJson()Java 完成的。
abc"de
{"data":"abc\"de"}
{\"data\":\"abc\\\"de\"}
json.decode也可以解码单个字符串,因此您应该可以调用两次。第一次返回一个字符串(转义字符已在其中解码),第二次返回该字符串到映射中:
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 }