#HarmonyOS NEXT体验官#HarmonyOS中json如何model 原创

不爱吃糖的程序媛
发布于 2024-8-4 08:10
浏览
0收藏

HarmonyOS中json如何model

今天我们来看一下json如何model。

首先我们要了解一下json转model的意义:

json转model的意义

在HarmonyOS开发中,将 JSON 数据转换为模型(model)具有以下重要意义:

  1. 数据结构化:JSON 通常是一种相对松散和无固定结构的数据格式。将其转换为特定的模型可以使数据具有明确的结构和类型定义,提高代码的可读性和可维护性。

  2. 类型安全:通过模型定义,可以确保数据的类型一致性。在后续对数据的操作中,减少因类型错误导致的运行时错误。

  3. 封装和抽象:将 JSON 数据封装到模型中,隐藏了数据的具体存储和处理细节,提供了更高级别的抽象,使开发者能够以更面向对象的方式处理数据。

  4. 代码的自解释性:明确的模型定义可以使代码更易于理解其意图和用途,其他开发者能够更快地理解数据的含义和使用方式。

  5. 方便数据验证:在转换过程中,可以进行数据的验证和校验,确保接收到的 JSON 数据符合预期的格式和规则。

  6. 提高开发效率:使用模型可以基于其提供的方法和属性进行操作,减少了对原始 JSON 数据的复杂处理逻辑,从而提高开发效率。

  7. 便于与框架和库集成:许多现代的开发框架和库都依赖于特定的模型结构来进行数据的传递和处理,将 JSON 转换为模型可以更好地与这些工具集成。

接下来我们看一下,如何进行转换。

这里面我们就拿下面的两组数据来举例。

{
  "cloudDBZoneName": "artZone",
  "objectTypeName": "artTable",
  "objects": [
          {
              "ID": 0,
              "address": "重庆",
              "author": "杨双/yuang",
              "author_introduction": "杨双是华人富豪榜第101位,在重庆坐拥数套别墅,是中国最年轻的富豪,所叙述的都是5年后",
              "basic_information": "这个软件是由杨双开发的一个小软件,由于个人能力的不足,软件内部还有着很多很多的bug,后续会进行填补完成",
              "collect": 0,
              "collect_text": "收藏",
              "name": "辞艺",
              "people_image": "common/images/author/0.jpg",
              "work_image": "common/images/name/0.jpg"
          },
          {
              "ID": 1,
              "address": "中国",
              "author": "陈凯歌",
              "author_introduction": "1987年陈凯歌与洪晃同居。1989年陈凯歌与洪晃在美国结婚。1991年陈凯歌与洪晃离婚;同年陈凯歌与陈红在美国注册结婚。",
              "basic_information": "《霸王别姬》改编自李碧华同名小说,叙述伶人程蝶衣对国粹艺术的执著,进而投影出历史与文化在大时代的演变下,造成的激荡与人生。影片蕴含深厚的文化内涵,气势恢宏,感情强烈,情节细腻深远。本片获得第46届法国戛纳国际电影节金棕榈奖,成为第一部也是迄今唯一获得此奖项的华语电影。",
              "collect": 27349,
              "collect_text": "收藏",
              "name": "霸王别姬",
              "people_image": "common/images/author/1.jpg",
              "work_image": "common/images/name/1.jpg"
          },
          {
              "ID": 2,
              "address": "英国",
              "author": "William Shakespeare",
              "author_introduction": "威廉·莎士比亚,英国文艺复兴时期剧作家、诗人。被誉为“人类文学奥林匹斯山上的宙斯”。",
              "basic_information": "《哈姆雷特》是由英国剧作家威廉·莎士比亚创作于1599年至1602年间的一部悲剧作品。戏剧讲述了叔叔克劳狄斯谋害了哈姆雷特的父亲,篡取了王位,并娶了国王的遗孀乔特鲁德;哈姆雷特王子因此为父王向叔叔复仇。《哈姆雷特》是威廉·莎士比亚所有戏剧中篇幅最长的一部,  也是莎士比亚最负盛名的剧本,具有深刻的悲剧意义。复杂的人物性格以及丰富完美的悲剧艺术手法,代表着整个西方文艺复兴时期文学的最高成就。同《麦克白》《李尔王》和《奥赛罗》一起组成莎士比亚“四大悲剧”。",
              "collect": 19429,
              "collect_text": "收藏",
              "name": "Hamlet",
              "people_image": "common/images/author/2.jpg",
              "work_image": "common/images/name/2.jpg"
          },
          {
              "ID": 3,
              "address": "英国",
              "author": "William Shakespeare",
              "author_introduction": "威廉·莎士比亚,英国文艺复兴时期剧作家、诗人。被誉为“人类文学奥林匹斯山上的宙斯”。",
              "basic_information": "《李尔王》是威廉·莎士比亚创作的戏剧,是其四大悲剧之一。故事来源于英国的一个古老传说,故事本身大约发生在8世纪左右。后在英国编成了许多戏剧,现存的戏剧除莎士比亚外,还有一个更早的无名氏作品,一般认为莎士比亚的李尔王是改编此剧而创作的。故事讲述了年事已高的国王李尔王退位后,被大女儿和二女儿赶到荒郊野外,成为法兰西皇后的三女儿率军救父,却被杀死,李尔王伤心地死在她身旁。",
              "collect": 23399,
              "collect_text": "收藏",
              "name": "King Lear",
              "people_image": "common/images/author/2.jpg",
              "work_image": "common/images/name/3.jpg"
          },
          {
              "ID": 4,
              "address": "英国",
              "author": "William Shakespeare",
              "author_introduction": "威廉·莎士比亚,英国文艺复兴时期剧作家、诗人。被誉为“人类文学奥林匹斯山上的宙斯”。",
              "basic_information": "《麦克白》是威廉·莎士比亚创作的戏剧,是其四大悲剧之一。故事来源于英国的一个古老传说,故事本身大约发生在8世纪左右。后在英国编成了许多戏剧,现存的戏剧除莎士比亚外,还有一个更早的无名氏作品,一般认为莎士比亚的李尔王是改编此剧而创作的。故事讲述了年事已高的国王李尔王退位后,被大女儿和二女儿赶到荒郊野外,成为法兰西皇后的三女儿率军救父,却被杀死,李尔王伤心地死在她身旁。",
              "collect": 12573,
              "collect_text": "收藏",
              "name": "Macbeth",
              "people_image": "common/images/author/2.jpg",
              "work_image": "common/images/name/4.jpg"
          },
          {
              "ID": 5,
              "address": "俄国",
              "author": "Pyotr Ilyich Tchaikovsky",
              "author_introduction": "柴可夫斯基(1840-1893)是俄国浪漫主义时期的杰出作曲家,以其富有感情和旋律的音乐风格而著称,对西方和东方音乐都有深刻的影响。他的代表作有《1812序曲》《胡桃夹子》《睡美人》等。",
              "basic_information": "《天鹅湖》是俄国作曲家柴可夫斯基于1875-1876年创作的一部浪漫主义芭蕾舞剧,讲述了一位王子与一位被邪恶巫师变成天鹅的公主之间的爱情故事。该剧被认为是芭蕾舞剧中最经典和最优美的作品之一。",
              "collect": 28195,
              "collect_text": "收藏",
              "name": "Swan Lake",
              "people_image": "common/images/author/3.jpg",
              "work_image": "common/images/name/5.jpg"
          },
          {
              "ID": 6,
              "address": "英国",
              "author": "William Shakespeare",
              "author_introduction": "威廉·莎士比亚,英国文艺复兴时期剧作家、诗人。被誉为“人类文学奥林匹斯山上的宙斯”。",
              "basic_information": "圣女贞德,法国民族英雄,天主教圣人,英法百年战争中的重要人物。贞德原为农村少女,在13岁时声称得到“上主的启示”,要求她带兵收复被英格兰占领的失地。在几番转折后,贞德得到王太子查理授予的兵权,于1429年成功解除奥尔良之围,同年再于帕提战役中大破英军。她在数月间接连收复法国北部大量失地,并夺下兰斯,护送查理至兰斯大教堂加冕为王,成为查理七世。但她于1430年在贡比涅的一次冲突中被勃艮第公国俘获,不久为英格兰人以重金购去,由英格兰当局控制下的宗教裁判所以异端和女巫罪判处她火刑。1431年,贞德在法国鲁昂遇害,年仅19岁。当英军被彻底逐出法国时,罗马教廷下令重审贞德一案,最终于1456年为她平反。1920年,教宗本笃十五世追封贞德为圣人。贞德是推动法国民族意识觉醒的重要人物,她本人在身后也成为了西方文化的一个重要符号。自拿破仑以来,法国的军政人物都曾以她的形象进行不同角度的宣传;教会视其事迹为神迹 。而欧洲主要的作家和作曲家都创作过有关贞德的作品,大量以她为题材的电影、戏剧和音乐创作也延续。",
              "collect": 26622,
              "collect_text": "收藏",
              "name": "Joan of Arc",
              "people_image": "common/images/author/2.jpg",
              "work_image": "common/images/name/6.jpg"
          },
          {
              "ID": 7,
              "address": "中国",
              "author": "东晋时期所著",
              "author_introduction": "东晋,中国朝代,乃西晋司马氏政权的延续。东晋与三国时期的东吴以及其后的宋、齐、梁、陈,合称为六朝。同时北方有多个游牧民族建立政权并连年征战,史称五胡十六国时期。",
              "basic_information": "《梁山伯与祝英台》,简称《梁祝》,是中国古代民间四大爱情故事之一(另外三个为《白蛇传》、《孟姜女传说》和《牛郎织女》),是中国最具魅力的口头传承艺术及国家级非物质文化遗产,也是在世界上产生广泛影响的中国民间传说。自东晋始,梁祝故事在民间流传已有1700多年,在中国可谓家喻户晓,被誉为爱情的千古绝唱。",
              "collect": 25315,
              "collect_text": "收藏",
              "name": "梁祝",
              "people_image": "common/images/author/4.jpg",
              "work_image": "common/images/name/7.jpg"
          },
          {
              "ID": 8,
              "address": "中国",
              "author": "曹雪芹",
              "author_introduction": "曹雪芹,名霑,字梦阮,号雪芹,又号芹溪、芹圃,中国古典名著《红楼梦》的作者,祖籍存在争议(辽宁辽阳、河北丰润或辽宁铁岭 ),出生于江宁(今南京),曹雪芹出身清代内务府正白旗包衣世家,他是江宁织造曹寅之孙 ,曹顒之子(一说曹頫之子)",
              "basic_information": "《红楼梦》,原名《石头记》,中国古代章回体长篇小说,中国古典四大名著之一。其通行本共120回,一般认为前80回是清代作家曹雪芹所著,后40回作者为无名氏,由高鹗,程伟元整理。小说以贾、史、王、薛四大家族的兴衰为背景,以富贵公子贾宝玉为视角,以贾宝玉与林黛玉、薛宝钗的爱情婚姻悲剧为主线,描绘了一些闺阁佳人的人生百态,展现了真正的人性美和悲剧美,是一部从各个角度展现女性美以及中国古代社会百态的史诗性著作。",
              "collect": 26028,
              "collect_text": "收藏",
              "name": "红楼梦",
              "people_image": "common/images/author/5.jpg",
              "work_image": "common/images/name/8.jpg"
          },
          {
              "ID": 9,
              "address": "意大利",
              "author": "Alexandre Dumas",
              "author_introduction": "亚历山大·仲马是法国著名小说家大仲马任奥尔良公爵秘书处的文书抄写员时与一女裁缝所生的私生子。因与其父重名而被称为小仲马。",
              "basic_information": "《茶花女》是意大利作曲家威尔第在观赏这部以法国文学家小仲马著名小说为本的戏剧《茶花女》后,备受感动,立即邀请剧作家修改剧本,以短短6周时间谱曲完成,改编为歌剧。《茶花女》是意大利歌剧泰斗威尔第“通俗三部曲”中的最后一部(其余两部是《弄臣》和《游吟诗人》),也是世界歌剧史上最卖座的经典作品之一。",
              "collect": 13161,
              "collect_text": "收藏",
              "name": "Camelia Flower",
              "people_image": "common/images/author/6.jpg",
              "work_image": "common/images/name/9.jpg"
          },
          {
              "ID": 10,
              "address": "英国",
              "author": "William Shakespeare",
              "author_introduction": "威廉·莎士比亚,英国文艺复兴时期剧作家、诗人。被誉为“人类文学奥林匹斯山上的宙斯”。",
              "basic_information": "在一场盛大的舞会上,罗密欧和朱丽叶相遇了。然而,两人所在的家族相互有着深仇大恨,所以情投意合的两人根本就没有可能走到一起。",
              "collect": 23614,
              "collect_text": "收藏",
              "name": "Romeo and Juliet",
              "people_image": "common/images/author/2.jpg",
              "work_image": "common/images/name/10.jpg"
          },
          {
              "ID": 11,
              "address": "中国",
              "author": "中国歌剧舞剧院",
              "author_introduction": "中国歌剧舞剧院是国家级艺术剧院,历史源于延安鲁迅艺术学院。剧院创作了《白毛女》等经典歌剧舞剧作品,守正创新,推出多部舞台艺术精品力作,赴全球多个国家进行交流演出,获得国内外好评。",
              "basic_information": "《宝莲灯》取材于中国传统神话故事《劈山救母》,剧中三圣母的长袖、刘彦昌的水袖、沉香的剑、霹雳大仙的拂尘、二郎神及哮天犬的身法技艺均在戏曲舞蹈基础上加以发展创新,富有表现力。《宝莲灯》是北京舞蹈学校第一届编导班的进修生在查普林教师与著名京剧艺术家李少春指导下的毕业实习作品。1959年,《宝莲灯》被拍摄成彩色艺术影片,受到广泛好评。",
              "collect": 19051,
              "collect_text": "收藏",
              "name": "宝莲灯",
              "people_image": "common/images/author/7.jpg",
              "work_image": "common/images/name/11.jpg"
          },
          {
              "ID": 12,
              "address": "中国",
              "author": "中央芭蕾舞团",
              "author_introduction": "中央芭蕾舞团是中国唯一的国家级芭蕾舞团。剧团创作演出了《天鹅湖》《红色娘子军》等经典芭蕾舞剧作品,守正创新,赴全球多个国家进行交流演出,获得国内外好评。",
              "basic_information": "本剧由同名电影改编而成,《红色娘子军》的故事发生在二十世纪三十年代的海南岛。以中国革命历史为背景依托,舞剧讲述了从恶霸南霸天府中逃出来的丫鬟琼花,在红军党代表洪常青的帮助下,从一名苦大仇深的农村姑娘,逐渐转变成一名有着坚定的共产主义信念的娘子军战士的过程。《红色娘子军》是我国芭蕾按照“革命化、民族化、群众化”进行改革的首次尝试。该剧开拓性地塑造了英姿飒爽的“穿足尖鞋”的中国娘子军形象,将西方芭蕾的技巧与中国民族舞蹈的表现手法结合,创造出了民族芭蕾的世纪精品,是中国芭蕾史上的一座傲人的里程碑,成就了中西文化在芭蕾艺术领域完美融合的世界奇迹。在音乐创作上,《娘子军连歌》《万泉河水清又清》等音乐几十年来经久不衰,深入人心。",
              "collect": 26392,
              "collect_text": "收藏",
              "name": "红色娘子军",
              "people_image": "common/images/author/8.jpg",
              "work_image": "common/images/name/12.jpg"
          },
          {
              "ID": 13,
              "address": "英国",
              "author": "Andrew Lloyd Webber",
              "author_introduction": "安德鲁·劳埃德·韦伯是英国作曲家,被誉为音乐剧之王,创作了多部经典的音乐剧作品。",
              "basic_information": "《歌剧魅影》改编自加斯东·勒鲁的同名小说,讲述了一个在歌剧院地下室居住的神秘人物,对一位年轻女歌手的执着爱恋,引发了一系列的惊险事件。",
              "collect": 26785,
              "collect_text": "收藏",
              "name": "The Phantom of the Opera",
              "people_image": "common/images/author/9.jpg",
              "work_image": "common/images/name/13.jpg"
          },
          {
              "ID": 14,
              "address": "美国",
              "author": "Alan Menken",
              "author_introduction": "阿兰·门肯是美国的作曲家和歌手,以为迪士尼动画电影创作音乐而著称。霍华德·阿什曼是美国的作词家和制作人,与门肯合作了多部迪士尼动画电影。",
              "basic_information": "《阿拉丁与神灯》改编自《一千零一夜》中的故事,讲述了一个穷苦的街头小子阿拉丁,通过一个神奇的灯神,实现了自己的梦想,并赢得了公主的爱情的故事。",
              "collect": 20571,
              "collect_text": "收藏",
              "name": "Aladdin and the Magic Lamp",
              "people_image": "common/images/author/10.jpg",
              "work_image": "common/images/name/14.jpg"
          }
  ]
}

第二组

{
    "schemaVersion": 3,
    "permissions": [
        {
            "permissions": [
                {
                    "role": "World",
                    "rights": [
                        "Read"
                    ]
                },
                {
                    "role": "Authenticated",
                    "rights": [
                        "Read"
                    ]
                },
                {
                    "role": "Creator",
                    "rights": [
                        "Read",
                        "Upsert",
                        "Delete"
                    ]
                },
                {
                    "role": "Administrator",
                    "rights": [
                        "Read",
                        "Upsert",
                        "Delete"
                    ]
                }
            ],
            "objectTypeName": "artTable"
        }
    ],
    "objectTypes": [
        {
            "indexes": [
                {
                    "indexName": "idindex",
                    "indexList": [
                        {
                            "fieldName": "ID",
                            "sortType": "ASC"
                        }
                    ]
                }
            ],
            "objectTypeName": "artTable",
            "fields": [
                {
                    "isNeedEncrypt": false,
                    "fieldName": "ID",
                    "notNull": true,
                    "isSensitive": false,
                    "belongPrimaryKey": true,
                    "fieldType": "Integer"
                },
                {
                    "isNeedEncrypt": false,
                    "fieldName": "address",
                    "notNull": false,
                    "isSensitive": false,
                    "belongPrimaryKey": false,
                    "fieldType": "String"
                },
                {
                    "isNeedEncrypt": false,
                    "fieldName": "author",
                    "notNull": false,
                    "isSensitive": false,
                    "belongPrimaryKey": false,
                    "fieldType": "String"
                },
                {
                    "isNeedEncrypt": false,
                    "fieldName": "author_introduction",
                    "notNull": false,
                    "isSensitive": false,
                    "belongPrimaryKey": false,
                    "fieldType": "Text"
                },
                {
                    "isNeedEncrypt": false,
                    "fieldName": "basic_information",
                    "notNull": false,
                    "isSensitive": false,
                    "belongPrimaryKey": false,
                    "fieldType": "Text"
                },
                {
                    "isNeedEncrypt": false,
                    "fieldName": "collect",
                    "notNull": false,
                    "isSensitive": false,
                    "belongPrimaryKey": false,
                    "fieldType": "Integer"
                },
                {
                    "isNeedEncrypt": false,
                    "fieldName": "collect_text",
                    "notNull": false,
                    "isSensitive": false,
                    "belongPrimaryKey": false,
                    "fieldType": "String"
                },
                {
                    "isNeedEncrypt": false,
                    "fieldName": "name",
                    "notNull": false,
                    "isSensitive": false,
                    "belongPrimaryKey": false,
                    "fieldType": "String"
                },
                {
                    "isNeedEncrypt": false,
                    "fieldName": "people_image",
                    "notNull": false,
                    "isSensitive": false,
                    "belongPrimaryKey": false,
                    "fieldType": "String"
                },
                {
                    "isNeedEncrypt": false,
                    "fieldName": "work_image",
                    "notNull": false,
                    "isSensitive": false,
                    "belongPrimaryKey": false,
                    "fieldType": "String"
                }
            ]
        }
    ]
}

接下来我们看一下如何转换。

首先我们在这儿下载插件,Atomgit

点击发行版,然后下载,

#HarmonyOS NEXT体验官#HarmonyOS中json如何model-鸿蒙开发者社区

#HarmonyOS NEXT体验官#HarmonyOS中json如何model-鸿蒙开发者社区

然后我们打开IDE,

选择导入,

#HarmonyOS NEXT体验官#HarmonyOS中json如何model-鸿蒙开发者社区

#HarmonyOS NEXT体验官#HarmonyOS中json如何model-鸿蒙开发者社区

导入以后,重启IDE,然后我们就可以开始使用啦。

复制前面的json,然后新建一个文件,单击鼠标右键,就可以看到json2ets,然后我们就可以使用啦。

#HarmonyOS NEXT体验官#HarmonyOS中json如何model-鸿蒙开发者社区

可以看到,可以生成class和interface。

生成interface

#HarmonyOS NEXT体验官#HarmonyOS中json如何model-鸿蒙开发者社区

点击generate就可以生成

export interface RootObject {
  schemaVersion: number;
  permissions: RootObjectPermissions[];
  objectTypes: RootObjectObjectTypes[];
}
export interface RootObjectPermissionsPermissions {
  role: string;
  rights: string[];
}
export interface RootObjectPermissions {
  permissions: RootObjectPermissionsPermissions[];
  objectTypeName: string;
}
export interface RootObjectObjectTypesIndexesIndexList {
  fieldName: string;
  sortType: string;
}
export interface RootObjectObjectTypesIndexes {
  indexName: string;
  indexList: RootObjectObjectTypesIndexesIndexList[];
}
export interface RootObjectObjectTypesFields {
  isNeedEncrypt: boolean;
  fieldName: string;
  notNull: boolean;
  isSensitive: boolean;
  belongPrimaryKey: boolean;
  fieldType: string;
}
export interface RootObjectObjectTypes {
  indexes: RootObjectObjectTypesIndexes[];
  objectTypeName: string;
  fields: RootObjectObjectTypesFields[];
}

如上就是interface结果。

生成class

#HarmonyOS NEXT体验官#HarmonyOS中json如何model-鸿蒙开发者社区

如下 就是结果

export class RootObject {
  schemaVersion?: number;
  permissions?: RootObjectPermissions[];
  objectTypes?: RootObjectObjectTypes[];
}
export class RootObjectPermissionsPermissions {
  role?: string;
  rights?: string[];
}
export class RootObjectPermissions {
  permissions?: RootObjectPermissionsPermissions[];
  objectTypeName?: string;
}
export class RootObjectObjectTypesIndexesIndexList {
  fieldName?: string;
  sortType?: string;
}
export class RootObjectObjectTypesIndexes {
  indexName?: string;
  indexList?: RootObjectObjectTypesIndexesIndexList[];
}
export class RootObjectObjectTypesFields {
  isNeedEncrypt?: boolean;
  fieldName?: string;
  notNull?: boolean;
  isSensitive?: boolean;
  belongPrimaryKey?: boolean;
  fieldType?: string;
}
export class RootObjectObjectTypes {
  indexes?: RootObjectObjectTypesIndexes[];
  objectTypeName?: string;
  fields?: RootObjectObjectTypesFields[];
}

是不是很好呢?这样大家就可以很方便的处理各类数据啦。

源码地址

Atomgit

gitee

©著作权归作者所有,如需转载,请注明出处,否则将追究法律责任
收藏
回复
举报
回复
    相关推荐