json.decode之后的null检查

时间:2018-06-14 14:41:51

标签: dart flutter

有没有办法快速检查已解码的JSON对象中的空条目?

例如:

final responseJson = json.decode(response.body);

返回以下内容:

responseJson['result']['mydata']['account'] = 'Joe Doe';

为了检查是否' mydata' part不是null,我必须执行以下操作:

if(responseJson != null)
        {
           if(responseJson['result'] != null)
              {

                 if(responseJson['result']['mydata'] != null)
...

这真的很难看。如何做到这一点:

if((responseJson != null) && (responseJson['result'] != null) && (responseJson['result']['mydata'] != null))
{
}

在Dart中,如果某些中间项为空(即['结果']),则会出现异常。

有空知道运算符,如:

obj?.method()

但如何将它们与解码的JSON地图对象一起使用?

2 个答案:

答案 0 :(得分:4)

如果要设置

中的值
responseJson['result']['mydata']['account'] = 'Joe Doe';

这可能适合你

data.putIfAbsent('result', () => {})
    .putIfAbsent('mydata', () => {})
    .putIfAbsent('account', () => 'John Doe');

阅读时可以使用

  if(data.containsKey('result') && data['result'].containsKey('mydata')) {
    data['result']['mydata']['account'] = 'Joe Doe';
  } else {
    print('empty');
  }

答案 1 :(得分:1)

您应该做的不是直接使用JSON对象,而是将其转换为Dart类。然后使用null aware operator。

final response = new Response.fromJSON(json.decode(''));

if (response?.result?.myData != null) {

}

您可以使用fromJSONjson_serializable生成built_value类构造函数。

或者您可以手动编写它们:

class Data {
  String account;

  Data.fromJSON(Map json) {
    if (json.containsKey('myData')) {
      account = json['myData'];
    }
  }
}

class Result {
  Data myData;

  Result({this.myData});

  Result.fromJSON(Map json) {
    if (json.containsKey('myData')) {
      myData = json['myData'];
    }
  }
}

class Response {
  Result result;

  Response({this.result});

  Response.fromJSON(Map json) {
    if (json.containsKey('result')) {
      result = json['result'];
    }
  }
}