有没有办法快速检查解码的 JSON 对象中的空条目?
例如:
final responseJson = json.decode(response.body);
Run Code Online (Sandbox Code Playgroud)
这将返回以下内容:
responseJson['result']['mydata']['account'] = 'Joe Doe';
Run Code Online (Sandbox Code Playgroud)
为了检查“mydata”部分是否不为空,我必须执行以下操作:
if(responseJson != null)
{
if(responseJson['result'] != null)
{
if(responseJson['result']['mydata'] != null)
...
Run Code Online (Sandbox Code Playgroud)
这真的很丑。如何做到这一点:
if((responseJson != null) && (responseJson['result'] != null) && (responseJson['result']['mydata'] != null))
{
}
Run Code Online (Sandbox Code Playgroud)
在 Dart 中,如果某些中间项为空(即 ['result']),则会出现异常。
有空感知运算符,例如:
obj?.method()
Run Code Online (Sandbox Code Playgroud)
但是如何将它们与解码的 JSON 映射对象一起使用?
如果你想设置一个值
responseJson['result']['mydata']['account'] = 'Joe Doe';
Run Code Online (Sandbox Code Playgroud)
这可能对你有用
data.putIfAbsent('result', () => {})
.putIfAbsent('mydata', () => {})
.putIfAbsent('account', () => 'John Doe');
Run Code Online (Sandbox Code Playgroud)
对于阅读,您可以使用
if(data.containsKey('result') && data['result'].containsKey('mydata')) {
data['result']['mydata']['account'] = 'Joe Doe';
} else {
print('empty');
}
Run Code Online (Sandbox Code Playgroud)
您应该做的是将其转换为 Dart 类,而不是直接使用 JSON 对象。然后使用空感知运算符。
final response = new Response.fromJSON(json.decode(''));
if (response?.result?.myData != null) {
}
Run Code Online (Sandbox Code Playgroud)
您可以使用或生成fromJSON类构造函数。json_serializablebuilt_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'];
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3906 次 |
| 最近记录: |