Эквивалент Гсона в Objective-C - PullRequest
18 голосов
/ 26 февраля 2011

Есть ли какой-либо эквивалент гсон в Objective-C?

Спасибо.

Ответы [ 8 ]

13 голосов
/ 30 января 2014

DCKeyValueObjectMapping https://github.com/dchohfi/KeyValueObjectMapping - это не синтаксический анализатор JSON, а преобразователь объекта-json для внедрения свойств NSObject из NSDictionary / NSArray.

6 голосов
/ 15 мая 2015

Я недавно использовал Mantle, который прекрасно работает и очень похож на GSON (который используется для проектов Android)

https://github.com/Mantle/Mantle

4 голосов
/ 23 сентября 2015

В Objective-C функциональность GSON встроена. Скажем, у меня есть класс, определенный так:

 @interface MyModel : NSObject
 @property(nonatomic,strong) NSString *name;
 @property(nonatomic,strong) NSString *address;
 @end

И скажем, у меня есть объект JSON, определенный так

{
    "name":"marc",
    "address":"1234 Some Street"
}

Тогда я могу использовать AFNetowrking , чтобы получить NSDictionary объекта JSON, что довольно просто. Наконец, вы можете просто сделать цикл, например, так: dict - это словарь, возвращаемый AFNetworking при анализе JSON, а self - это экземпляр MyModel.

for (NSString *key in dict) {
   [self setObject:dict[key] forKey:key];
}

В Java GSON использует отражение для достижения того же эффекта, что и вышеприведенный цикл. Это просто намного проще в target-c, поэтому нет необходимости в библиотеке для этого. Если у вас есть вложенные объекты, возможно AFNetworking с DCKeyValueObjectMapping.

4 голосов
/ 28 января 2015

OCMapper очень похож на Gson и прост в использовании https://github.com/aryaxt/OCMapper

Json

{
   "firstName"   : "FirstName",
   "lastName"    : "LastName",
   "age"         : 26,
   "dateOfBirth" : "01/01/2013",
   "address"     : { 
                        "city" : "San Diego", 
                        "country" : "US"  
                   },
   "posts"       : [
                         {
                             "title" : "Post 1 title",
                             "datePosted : "04/15/2013",
                         },
                         {
                             "title" : "Post 2 title",
                             "datePosted : "04/12/2013",
                         }
                   ]
}

Модель

@objc public class User: NSObject {

    var firstName: String?
    var lastName: String?
    var age: NSNumber?
    var dateOfBirth: NSDate?
    var address: Address?
    var posts: [Post]?
}

Использование Swift

let user = ObjectMapper.sharedInstance().objectFromSource(dict, toInstanceOfClass:User.self) as User

or

let User = User.objectFromDictionary(dictionary)

Цель использования C

User *user = [[ObjectMapper sharedInstance] objectFromSource:dictionary toInstanceOfClass:User.class];

or

User *user = [User objectFromDictionary:dictionary];
0 голосов
/ 10 апреля 2019

OCMapper - лучшая из известных мне и самая легкая библиотека, она также имеет обратное отображение и отображает сложные объекты без необходимости настройки, а также работает с realmObjects

0 голосов
/ 03 апреля 2019

На WWDC 2017 Apple представила новую функцию в Swift для анализа JSON без каких-либо проблем с использованием протокола Swift Codable

struct YourStructure: Codable {
    let name: String?
    let avatarUrl: URL?
    private enum CodingKeys: String, CodingKey {
        case name
        case avatarUrl = "avatar_url"
    }
}

Декодер:

let decoder = JSONDecoder()
parsedData = decoder.decode(YourStructure.self, from: YourJsonData)

закодировать:

let jsonEncoder = JSONEncoder()
let jsonData = try jsonEncoder.encode(data)

больше информации: Кодирование и декодирование пользовательских типов

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

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

0 голосов
/ 26 февраля 2011
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...