Sur*_*rma 1 json dictionary core-data ios swift
我需要使用CoreData在本地将来自API调用的一些数据存储为JSON.
问题是,JSON对我来说太复杂了,无法在CoreData中处理.我得到JSON作为一个Dictionary有4个按键,这些按键4再次拥有Dictionary的那些Dictionary的拥有Array的和Dictionary的.
现在,我真的不知道我应该如何为这个要求设计实体和属性,但我试着这样做,我做的是,我创建了一个实体(比如XYZ),这个实体有4个关系(一对一)到4个其他实体,这四个实体只不过Dictionary是我在JSON文件中得到的四个实体.我将这些Array和Dictionary's ' 存储为可转换的类型.这有点令人困惑,对吧?那么让我把JSON数据放在这里
{
outerKey1 = {
someKey = “Some String";
disableAutoFill = 1;
disableABC = 1;
disableXYZ = 1;
disableThis = 1;
disableThat = 1;
disableBla = 1;
disableBlaBla= 1;
disableBlaBlaBlaBla = 1;
disableBlaBlaBlaBlaBlaBla= 1;
};
outerKey2 = {
someKey = (
{
markPath = 0;
title = "Some Name";
url = "http://www.BlaBla.com";
},
{
markPath = 0;
title = "Some Name";
url = "http://www.something.com";
},
{
markPath = 0;
title = Yahoo;
url = "http://www.yahoo.com";
},
{
Path = 0;
title = “title";
url = "http://www.title.com";
}
);
enabled = 1;
};
outerKey3 = {
enabled = 1;
gatewayIP = "192.172.169.10";
gatewayPort = 8080;
gatewayRoutingUrls = (
"www.kuchbhi.com",
"www.oh-teri.com"
);
};
outerKey4 = {
SomeCategories = (
SomeCategories,
someOtherCategories
);
defaultUrl = "www.meriapniwebsite.com";
enabled = 1;
exceptionUrls = (
"www.kuchbhihojay.com"
);
filterUrls = (
"www.kuchtobhi.com",
"www.kyaaapjhandhai.com"
);
filteringFlag = 1;
};
}
Run Code Online (Sandbox Code Playgroud)
我的方法是正确还是需要纠正?或者我需要以完全不同的方式实现它.请帮帮我,谢谢
问题是您正在尝试根据JSON的结构创建CoreData实体.您应该根据JSON表示的对象以及它们之间的关系来创建实体.
您的问题并没有真正提供有关数据模型意图的足够信息,以便我给您一个确切的答案,但是将这些数据存储为一堆可转换的字典可能不是最好的答案.使用可转换属性意味着无法查询这些值,并且您没有应该在这些词典中的属性的显式列表.这意味着if let每当您访问数据时,您将有大量语句检查字典中的字符串类型值.相反,这些值中的每一个都应映射到CoreData实体上的属性.
我要问的第一件事是这些outerKey字典是否代表我的基础对象的属性和值,或者每个字典是否outerKey真正代表了与根对象有关系的自己的模型对象.如果它们是一个对象上的属性,则只需读取JSON并将值映射到实体上的属性.如果没有,那么您应该创建多个实体并创建您当前正在进行的关系,但是您应该为这些实体上的每个值创建属性.
对于嵌套数组和字典,您可能还希望创建具有关系的其他实体.
请记住,您的CoreData模型应该反映对象及其相互关联的方式.JSON除非你JSON恰好代表正确的结构,否则它不应只反映你的结构.
例
因为我不知道你的数据真正代表什么,这对你的应用程序来说可能不是一个完美的结构,但是对你的JSON意思做出一些假设,这就是我想出的实体.
- RootEntity
- outerKey1: OuterKey1 // one to one
- outerKey2: OuterKey2 // one to one
- outerKey3: OuterKey3 // one to one
- outerKey4: OuterKey4 // one to one
- OuterKey1
- someKey: String
- disableAutoFill: Bool
- disableABC: Bool
- disableXYZ: Bool
- disableThis: Bool
- disableThat: Bool
- disableBla: Bool
- disableBlaBla: Bool
- disableBlaBlaBlaBla: Bool
- disableBlaBlaBlaBlaBlaBla: Bool
- OuterKey2
- someKey: [SomeKeyEntity] // one to many
- enabled: Bool
- SomeKeyEntity
- markPath: Bool
- title: String
- urlString: String
- OuterKey3
- gatewayIP: String
- gatewayPort: Int
- gatewayRoutingURLs: [String] // This can be a transformable `Array`, unless you think you will need to query based on this property later
- enabled: Bool
- OuterKey4
- someCategories: [SomeCategoriesEntity] // one to many
- defaultURL: String
- enabled: Bool
- exceptionURLs: [String] // This can be a transformable `Array`, unless you think you will need to query based on this property later
- filterURLs: [String] // This can be a transformable `Array`, unless you think you will need to query based on this property later
- filteringFlag: Bool
Run Code Online (Sandbox Code Playgroud)
希望有所帮助!
| 归档时间: |
|
| 查看次数: |
271 次 |
| 最近记录: |