Является ли RestKit единственной платформой, в которой есть сопоставление объектов JSON и Objective-C? - PullRequest
0 голосов
/ 29 мая 2011

Я ищу библиотеку или инфраструктуру, которая выполняет реляционное сопоставление объектов JSON и Objective-C. то есть мне нужно сопоставить JSON-объекты, массивы объектов и словари объектов с моими пользовательскими объектами.

что-то вроде:

DataObject {
    "user" : {
        "name":"Peter",
        "id":1234
    }
    "place": "UK"
    "job": {
        "title" : "CTO",
        "salary" : 1234567
    }
    "employess": [
        {
            "name":"Carlton",
            "id":1235
        },
        {
            "name":"Hugo",
            "id":12346
        }]
}

Таким образом, существует DataObject UserObject и массив сотрудников, состоящий из UserObjects. Я бы хотел, чтобы отображение из JSON в мой объект DataObject происходило «автоматически», что, разумеется, означало, что я хотел бы описать объекты и их связи в классе Object и выполнить сопоставление из этого, а не вручную сопоставлять каждый вложенный объект. объект. (Собственные свойства target-c первого уровня легко выполняются с помощью setValue: forKey и других методов KVO, но с тех пор это усложняется).

Я тестировал RestKit, но, похоже, нет способа выбрать, какая функциональность вам нужна из этого фреймворка, она либо вся, либо ее нет, и я считаю, что она делает слишком много для моих нужд .

Кто-нибудь знаком с библиотекой и т. Д., Кто может это сделать?

Заранее спасибо.

Ответы [ 2 ]

2 голосов
/ 13 ноября 2012

Чтобы отобразить JSON на объекты Objective-C, я попробовал RestKit.Я использовал это некоторое время назад, поэтому мои критические замечания могут больше не применяться.
То, что я обнаружил: хорошая идея.Не слишком сложный для плагинов.Если это работает, отлично подходит для вас.Но если нет, или если вам нужно продвинуть его немного дальше, удачи в отладке.
Я сожалею о времени, которое я потратил на это.

Я ищу только JSON для объектов Objective-C,А не наоборот.Я нашел ссылку на SO на JTObjectMapping - но не могу найти оригинальный ответ.Кажется более легким и близким к тому, что я искал, но у меня не было возможности попробовать.

Другой подобный класс: jastor .

Я предпочитаюподход этих двух классов по сравнению с RestKit, поскольку он заботится только об одной работе, тогда как RestKit пытался справиться со всем.

0 голосов
/ 30 мая 2011

То, что вы опубликовали выше, не является действительным JSON.Если вы сделали его действительным JSON, то то, что вы хотите сделать, невозможно без конкретной схемы, например.

{
    "DataObject": {
        "user": {
            "name": "Peter",
            "id": 1234
        },
        "place": "UK",
        "job": {
            "title": "CTO",
            "salary": 1234567
        }
    }
}

Является ли Dataobject словарем или объектом?А как насчет пользователя или работы?Что такое User является экземпляром NSUser, а задание является NSDictionary?

С другой стороны, если у вас есть известная схема: -

[
    {
        "class": "DataObject",
        "properties": {
            "user": {
                "class": "User",
                "properties": {
                    "name": "Peter",
                    "id": 1234
                }
            },
            "place": "UK",
            "job": {
                "title": "CTO",
                "salary": 1234567
            }
        }
    }
]

вам не нужна инфраструктура, так кактривиально сопоставить свои объекты самостоятельно, если у вас есть действительный JSON.Псевдокод: -

createWithDict(dict) {
    var newOb = create new(dict["class"]);
    dict.properties.each( val, key ) {
        if(val is dictionary && val.hasproperty("class"))
            val = createWithDict(val)
        newOb[key] = val
    }   
    return newOb;
} 
...