我尝试使用gson反序列化json,然后使用Room将其插入DB,但没有成功:
[
{
"id": 1,
"name": "category1",
"categories": [
{
"id": 2,
"name": "category2",
"count": 321
},
{
"id": 3,
"name": "category3",
"categories": [
{
"id": 4,
"name": "category4",
"count": 20
},
{
"id": 5,
"name": "category5",
"count": 205
},
{
"id": 6,
"name": "category6",
"count": 85
}
]
}
]
}
]
类别对象应包含:
- id(唯一,必需)
- 名称(必填)
- 父标识
- count(如果没有子项,则为内容大小)
请帮助我递归地解析这个并插入数据库。
1条答案
按热度按时间eqoofvh91#
您需要做的是创建反映JSON的类,以便提取数据,然后从这些类中插入数据。
检查您提供的json,然后您可以:-
1.一个可以是主类别的数组,
1.类别数组,每个类别都可以有
1.返回一个类别数组。
但是,您似乎希望根据以下内容保存所有内容:-
类别对象应包含:id(唯一,必需)name(必需)parent_id count(如果没有子项,则为内容大小)
作为类别。
因此,考虑到这一点,主类将是Category(您希望将所有3种类型(主类别、类别和类别中的类别)存储到其中)
所以首先是一个MainCategory类:-
然后是一个Category类,它也是用于定义数据库中的表的类。这可以是:-
为了支持数据库访问,您有一个@Dao注解类CategoryDao,例如(足以演示存储和检索):-
为了合并以上所有内容,从数据库方面来看,您有一个@Database注解类TheDatabase,例如:-
.allowMainThreadQueries
已被编码(因此可以使用主线程进行演示)最后,实际演示一个将使用JSON的活动,将所有三种类型(Master、Category和Categories)存储为一行,并带有相应的父级(即,Categories将以各自的MasterCategory id作为父级,Category中的categories将以Category的id作为父级)。
由于MasterCategory没有计数,因此计数将为0。
在演示中使用了gson库,如
implementation 'com.google.code.gson:gson:2.9.0'
。这允许非常简单的**getMasterCategoryListFromJSON
方法,将JSON转换为MasterCategory数组。另一个核心方法是
insertCategoriesFromMasterCategoryArray
**。它接受MasterCategory[]并为所有三个级别/类型插入Category行。它返回插入ID的long[],或者如果插入被忽略,如果存在冲突(重复),则它将存储-1以指示。因此,主要活动:-
运行时(这只是一个演示,因此只运行一次),它会将以下内容输出到日志中:-
使用应用程序检查,则数据库为:-