Flutter/Dart中替换$符号及访问含$t键的JSON数据方法
解决Flutter/Dart中访问含$的JSON键及替换$符号的问题
我帮你拆解一下问题,分两种场景来解决:
一、直接访问JSON中的$t键
你遇到的错误是因为Dart的字符串插值特性——当你在双引号字符串里写$t时,Dart会把它当成一个变量来解析,而不是字面量的键名。解决方法很简单:
方法1:使用单引号包裹键名
Dart中单引号字符串不支持插值,所以直接用单引号把$t包起来,就能作为普通键名访问:
String bookTitle = jsonData['gamebook']['meta']['title']['$t'];
方法2:在双引号中转义$符号
如果习惯用双引号,只需要给$加反斜杠转义,让Dart把它当成普通字符:
String bookTitle = jsonData['gamebook']['meta']['title']['\$t'];
两种方式都能正常拿到$t对应的值,不会触发插值错误。
二、转换为JSON前替换$t键名
如果你想彻底换掉这个特殊键名,避免后续麻烦,在处理字符串时需要注意转义$,防止被Dart当成插值:
处理JSON字符串(转换后替换)
假设你已经把XML转成了JSON字符串,直接用replaceAll时,用单引号包裹目标字符串,或者在双引号中转义$:
// 方式1:单引号(推荐,无需转义) String modifiedJsonStr = originalJsonStr.replaceAll('$t', 'text'); // 方式2:双引号转义$ String modifiedJsonStr = originalJsonStr.replaceAll('\$t', 'text');
之后再把修改后的字符串解析为JSON对象,就可以用新键名(比如text)访问了。
处理XML字符串(转换前替换)
如果想在XML阶段就替换,逻辑类似,找到XML中对应$t的节点字符串,用同样的替换方式处理后再转JSON即可。
内容的提问来源于stack exchange,提问作者Arnold Rimmer
相关产品推荐
相关产品推荐

