2

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)

问题:

  1. 有针对这个的解决方法吗?(例如,强制 JSON.parse 创建字符串)
  2. 有没有更好的方法来处理这个?(例如,直接从 JSON 字符串中提取数据)
4

2 回答 2

1

从我看到的你sResponse mAcctData['I_Id']真的是int

{
  "S_Custname": "James Bond",
  "I_Id": 1,
  "I_Acctnr": 123456789,
  "I_AcctBal": 63727272,
  "I_AvailBal": 0
}

所以如果你想得到一个StringformAcctData['I_Id']你可以使用int.toString()

String sId = mAcctData['I_Id'].toString();
于 2013-01-11T07:39:21.370 回答
0

如果您希望它们是这样的,只需将您的整数转换为字符串:

{
    "S_Custname": "James Bond",
    "I_Id": "1",
    "I_Acctnr": "123456789",
    "I_AcctBal": "63727272",
    "I_AvailBal": "0"
}

现在它应该可以正常工作了。或者,用于.toString()将整数转换为字符串。

于 2013-01-11T07:36:08.883 回答