映射嵌套 JSON 时如何检查 NULL?

2023-11-26

我正在尝试将嵌套 JSON 映射到模型对象,问题是当它返回 null 时,它将破坏所有代码,我想检查 null 是否执行某些操作但不会破坏应用程序。

JSON 文件:

[
    {
        "id": 53,
        "date": "2018-12-28T08:51:11",
        "title": {
            "rendered": "this is for featured"
        },
        "content": {
            "rendered": "\n<p><g class=\"gr_ gr_3 gr-alert gr_spell gr_inline_cards gr_run_anim ContextualSpelling\" id=\"3\" data-gr-id=\"3\">sdafkj</g> <g class=\"gr_ gr_10 gr-alert gr_spell gr_inline_cards gr_run_anim ContextualSpelling ins-del multiReplace\" id=\"10\" data-gr-id=\"10\">kj</g> <g class=\"gr_ gr_16 gr-alert gr_spell gr_inline_cards gr_run_anim ContextualSpelling ins-del multiReplace\" id=\"16\" data-gr-id=\"16\">asd</g> <g class=\"gr_ gr_18 gr-alert gr_spell gr_inline_cards gr_run_anim ContextualSpelling\" id=\"18\" data-gr-id=\"18\">kadjsfk</g> kljadfklj sd</p>\n",
            "protected": false
        },
        "excerpt": {
            "rendered": "<p>sdafkj kj asd kadjsfk kljadfklj sd</p>\n",
            "protected": false
        },
        "author": 1,
        "featured_media": 54,
        "_links": {
            "self": [
                {
                    "href": "https://client.kurd.app/wp-json/wp/v2/posts/53"
                }
            ],

        },
        "_embedded": {
            "author": [
                {
                    "id": 1,
                    "name": "hooshyar",

                }
            ],
            "wp:featuredmedia": [
                {
                    "id": 54,

                    "source_url": "https://client.kurd.app/wp-content/uploads/2018/12/icannotknow_22_12_2018_18_48_11_430.jpg",
                    }
                    ]
}
]

映射到对象的代码:

  featuredMediaUrl = map ["_embedded"]["wp:featuredmedia"][0]["source_url"];

方法“map”被调用为空。 接收者: null [0] 有时返回 null ;


根据我的评论,我建议您使用代码生成库来解析JSON to JSON Models.

Read 本文解释您如何使用(例如)json_serialized包裹。

此类库承担生成所有样板代码的所有肮脏工作创建您的模型类并由他们负责null值是否强制。

例如,如果您像这样注释一个 Person 类:

@JsonSerializable(nullable: true)
class Person {
  final String firstName;
  final String lastName;
  final DateTime dateOfBirth;
  Person({this.firstName, this.lastName, this.dateOfBirth});
  factory Person.fromJson(Map<String, dynamic> json) => _$PersonFromJson(json);
  Map<String, dynamic> toJson() => _$PersonToJson(this);
}

with (nullable: true)模型的 dart 类将跳过空值字段。

enter image description here

UPDATE

因为我渴望我所给予的技术快速打字工具(由 Christoph Lachenicht 建议)尝试使用您的示例。

我准备了一个mock api和一个文件example.json提供您发布的 JSON。我只取了一个元素,而不是数组。你可以在这里看看示例.json.

安装 QuickType 后,我生成了此 json 的模型类:

quicktype --lang dart --all-properties-optional example.json -o example.dart

这里注意一下cli参数--all-properties-optional为缺失字段创建空检查。

Map<String, dynamic> toJson() => {
    "id": id == null ? null : id,
    "date": date == null ? null : date,
    "title": title == null ? null : title.toJson(),
    "content": content == null ? null : content.toJson(),
    "excerpt": excerpt == null ? null : excerpt.toJson(),
    "author": author == null ? null : author,
    "featured_media": featuredMedia == null ? null : featuredMedia,
    "_links": links == null ? null : links.toJson(),
    "_embedded": embedded == null ? null : embedded.toJson(),
};

然后我在中使用了示例类example.dart

var jsonExampleResponse =
    await http.get('https://www.shadowsheep.it/so/53962129/testjson.php');
print(jsonExampleResponse.body);

var exampleClass = exampleFromJson(jsonExampleResponse.body);
print(exampleClass.toJson());

一切都很顺利。

N.B.当然,当您使用此类时,您必须在使用它们之前检查其字段是否为空:

print(exampleClass.embedded?.wpFeaturedmedia?.toString());

就这样。我希望能让你走上正确的方向。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

映射嵌套 JSON 时如何检查 NULL? 的相关文章

随机推荐

  • 如何在Android中使用Web视图访问本地主机服务器

    我有一个 Android 应用程序 我需要访问我的网络服务器并将我的 Android 应用程序连接到网络上的另一个程序 我的网络程序正在工作 当我将其 IP 地址放在 Android FIrefox 或浏览器上时 它正在工作 但是当我用我的
  • 如何在 Angular 2 中解释 MVC 模式?

    找到了一个有用的博客Angular MVC 实现但仍在寻找好的解释角2 General 我认为该模式确实与语言无关 也就是说 设计 架构模式是相当抽象的 并且用不同的语言实现它们遵循这种更抽象的表示 这并不是说我们不能通过示例语言 例如 C
  • 获取 PostgreSQL 中某个范围内的日期列表

    我想获取两个日期 包括它们 之间的天数列表PostgreSQL数据库 例如 如果我有 开始日期 2012年6月29日 结束日期 2012年7月3日 那么结果应该是 29 june 2012 30 june 2012 1 july 2012
  • 初始化大型 std::array 时编译器挂起

    我需要初始化一个非常大的多维std array数据的 class Thing class World public World space nullptr World default private static unsigned int
  • ASP.NET MVC 4 异步控制器回调

    我只是使用 MVC 4 中新的异步控制器功能 如此处所述http www asp net mvc tutorials mvc 4 using asynchronous methods in aspnet mvc 4 如果我有一个可能需要 1
  • Leaflet - 获取覆盖全屏的地图

    在传单和地图框中 我想去掉地图上方和下方的两个灰色条 如下图所示 我的 map DOM 元素占据全屏 并且当我放大时灰色条消失 例如 zoomLevel 3 因此 灰色条似乎是由于 ZoomLevel 具有给定的图块高度 以 px 为单位
  • 获取给定 ID 的最新行

    在下表中 我如何获得最近一行 with id 1基于signin列 而不是全部 3 行 id signin signout 1 2011 12 12 09 27 24 NULL 1 2011 12 13 09 27 31 NULL 1 20
  • 如何在 Xcode 11 中启动没有 Storyboard >= iOS 13 的新项目?

    现在 带有 iOS 13 的 Xcode 11 启动时的设置与之前略有不同 将 AppDelegate m 文件中的许多功能移动到名为 SceneDelegate m 的新文件中 删除 Main storyboard 并在 AppDeleg
  • WPF DataGrid ComboBox 导致 InvalidOperationException

    当我尝试编辑组合框列的值时 我从数据网格中收到 InvalidOperationException AddNew 或 EditItem 事务期间不允许 DeferRefresh 我显示的所有项目都引用了同一列表中的另一个项目 因此这就是我使
  • 将 NumPy 字符串数组转换为日期时间

    例如 我有一个字符串数组 import numpy as np foo np array b 2014 04 05 b 2014 04 06 b 2014 04 07 为了检查数组的数据类型 我用以下命令打印它 print foo dtyp
  • 为什么 InnoDB 中的 IX 锁与另一个 IX 锁兼容?

    根据innodb锁模式 锁类型兼容性矩阵 X IX S IS X Conflict Conflict Conflict Conflict IX Conflict Compatible Conflict Compatible S Confli
  • 在c#中,如何构建从A到ZZ的数组,类似于excel对列进行排序的方式

    我正在寻找可以生成第一项是数组的代码A then B then C 后Z然后它会去AA then AB then AC 一直到ZZ 在 C 中执行此操作的最佳方法是什么 其中一种方法是 IEnumerable
  • 使用 Selenium Webdriver 查找元素内的元素

    我正在抓取一个网站 其中包含使用 JavaScript 生成的足球比赛列表 我编写了以下行 用于创建页面上所有游戏元素的列表 list browser find elements by xpath data sportid 1 如果我然后写
  • 将 Web.config 从 .NET 2.0 转换为 3.5

    我至少需要添加到 NET 2 0 网站的 web config 中以使其成为 NET 3 5 Visual Studio 添加了所有配置部分和脚本处理程序 但如果您不使用它们 它们真的有必要吗 是否有命令行工具可以将 NET 2 0 web
  • 什么是非脆弱 ABI?

    这似乎暗示everyone知道 Non Fragile ABI 是什么 考虑到它在 Xcode 中被引用的频率和事实性质 例如 下标需要接口节点的大小 这在非脆弱 ABI 中不是恒定的 or 选择要使用的 Objective C ABI 版
  • 在android中的onPreviewFrame期间转换YUV->RGB(图像处理)->YUV?

    我正在使用 SurfaceView 捕获图像并获取 Yuv Raw 预览数据public void onPreviewFrame4 byte data 相机camera 我必须在 onPreviewFrame 中执行一些图像预处理 因此我需
  • Predsort/3 类似于 msort/2

    我想知道是否可以使用predsort 3不丢失重复值 如果不是 那我应该如何对这个术语列表进行排序 当前排序功能 compareSecond Delta n A n B compare Delta A B Result predsort c
  • 如何正确处理 dom 为 Meteor 做好准备

    我目前正在使用iron router 这是我第一次尝试Meteor 平台 我遇到了大多数 jquery 库无法正确初始化的问题 因为 Meteor 渲染 html 的方式 document ready 在渲染任何模板之前触发 我想知道是否有
  • MySQL:“IN”子句的条目有限制吗? [复制]

    这个问题在这里已经有答案了 可能的重复 MySQL in 子句 中的项目数 在 mysql 或 postgres 中 IN 1 2 n 语句的大小是否有限制 我动态构建一个 IN 列表 我想知道mysql中IN子句的大小是否有限制 SELE
  • 映射嵌套 JSON 时如何检查 NULL?

    我正在尝试将嵌套 JSON 映射到模型对象 问题是当它返回 null 时 它将破坏所有代码 我想检查 null 是否执行某些操作但不会破坏应用程序 JSON 文件 id 53 date 2018 12 28T08 51 11 title r