使用动态数据解析RestKit中的JSON

时间:2012-10-22 15:01:36

标签: objective-c ios json restkit

我正在尝试解析以下JSON,但是我收到以下错误。

“错误无法找到keyPath的对象映射:''”

据我所知,这是因为我没有提供SetMapping:forKeyPath:但是我无法设置它,因为密钥会随着您在JSON中的显示而改变,例如BBC ONE,BBC TWO等等。 我不需要保存服务名称,因为我计划将SID与另一个json文件交叉引用,该文件包含存储在核心数据中的这些详细信息以提供此信息。 (如果它是可能的)。 有没有解决这个错误的方法?

这是我的JSON(缩减版)

{
    "BBC ONE": [
        {
            "Name": "Programme 1",
            "Description": "A desc of a programme",
            "ONID": 1,
            "TSID": 2,
            "SID": 3,
            "CRID": "crid_address"
        },
        {
            "Name": "Programme 2",
            "Description": " Another desc",
            "ONID": 9,
            "TSID": 99,
            "SID": 999,
            "CRID": "crid_2"
        }
    ],
    "BBC TWO": [
        {
            "Name": "bbc_programme",
            "Description": "programme 2",
            "Event ID": 4,
            "ONID": 9,
            "TSID": 4,
            "SID": 4,
            "CRID": "crid"
        }
    ]
}

等等。

这是我的代码:

RKManagedObjectMapping *epgMapping = [RKManagedObjectMapping mappingForClass:[Epg class] inManagedObjectStore:objectManager.objectStore];

        [epgMapping mapKeyPathsToAttributes:@"Name",@"name",
                                        @"Description", @"desc",
                                        @"Event ID", @"event_id",
                                        @"ONID", @"onid",
                                        @"TSID", @"tsid",
                                        @"SID",  @"sid",
                                        @"CRID", @"crid",nil];


    epgMapping.primaryKeyAttribute = @"crid";

任何帮助将不胜感激,因为我已阅读各种文件,并查看其他人的问题,无法找到解决方案。

由于

1 个答案:

答案 0 :(得分:1)

您将值存储在json名称 - 值对的名称部分中。建议将你的json(如果可以的话)更改为:

"Name" : "BBC ONE",
"Programs" : [
    {
        "Name": "Programme 1",
        "Description": "A desc of a programme",
        "ONID": 1,
        "TSID": 2,
        "SID": 3,
        "CRID": "crid_address"
    },
    {
        "Name": "Programme 2",
        "Description": " Another desc",
        "ONID": 9,
        "TSID": 99,
        "SID": 999,
        "CRID": "crid_2"
    }