Dart 很棒,就像编程一样。IDE也很棒。我遇到了 Dart JSON.parse 函数在我看来是一个问题(对我来说)。在我看来,问题是如果一个字符串是一个整数,它会在 Map 中创建一个整数。这可能是不可取的,因为可能存在字符串字段包含数字的情况。例如。仅包含门牌号的地址。或者,也许我只是做错了什么。
暴露可能问题的代码行是:
String sId = mAcctData['I_Id'];
我认为对此有一个合乎逻辑的解决方案,如果是这样,我将不胜感激
httpSubmitAccountNrLoadEnd(HttpRequest httpReq) {
String sResponse = null;
if (httpReq.status != 200) {
print('On Http Submit Account Nr. There was an error : status = ${httpReq.status}');
} else {
print("On Return from Http Submit Account Nr. no error - status = ${httpReq.status}");
sResponse = httpReq.responseText;
}
print("Response From Submit Account Nr. = ${sResponse}"); // print the received raw JSON text
Map mAcctData = JSON.parse(sResponse);
print ("Json data parsed to map");
print ("Map 'S_Custname' = ${mAcctData['S_Custname']}");
String sCustName = mAcctData['S_Custname'];
print ("About to extract sId from Map data");
String sId = mAcctData['I_Id'];
print ("sId has been extracted from Map data");
String sAcctNr = mAcctData['I_AcctNr'];
String sAcctBal = mAcctData['I_AcctBal'];
以下是控制台输出。显示我遇到的问题的行是:
Exception: type 'int' is not a subtype of type 'String' of 'sId'.
即将发送http消息 从 Http 返回时提交帐户编号。没有错误 - 状态 = 200 来自提交帐户编号的响应。= {"S_Custname":"詹姆斯邦德","I_Id":1,"I_Acctnr":123456789,"I_AcctBal":63727272,"I_AvailBal":0} Json 数据解析为 map 地图“S_Custname”=詹姆斯邦德即将从 Map 数据中提取 sId
例外:类型“int”不是“sId”的“String”类型的子类型。
堆栈跟踪:#0 httpSubmitAccountNrLoadEnd (http://127.0.0.1:3030/C:/Users/Brian/dart/transact01/transact01.dart:75:31)
1 提交AccountNr.submitAccountNr。(http://127.0.0.1:3030/C:/Users/Brian/dart/transact01/transact01.dart:33:59)
例外:类型“int”不是“sId”的“String”类型的子类型。 堆栈跟踪:#0 httpSubmitAccountNrLoadEnd (http://127.0.0.1:3030/C:/Users/Brian/dart/transact01/transact01.dart:75:31)
1 提交AccountNr.submitAccountNr。(http://127.0.0.1:3030/C:/Users/Brian/dart/transact01/transact01.dart:33:59)
问题:
- 有针对这个的解决方法吗?(例如,强制 JSON.parse 创建字符串)
- 有没有更好的方法来处理这个?(例如,直接从 JSON 字符串中提取数据)