Подтвердить что ты не робот

Gson эквивалент в Objective-C

Есть ли эквивалент gson в Objective-C?

Спасибо.

4b9b3361

Ответ 1

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

Ответ 2

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

https://github.com/Mantle/Mantle

Ответ 3

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",
                         }
                   ]
}

Model

@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];

Ответ 4

В 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 использует отражение для достижения того же эффекта, что и указанный выше цикл. Это намного проще в Objective-C, поэтому нет необходимости в библиотеке. Если у вас есть вложенные объекты, возможно, AFNetworking с DCKeyValueObjectMapping.

Ответ 5

На 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)

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

Ответ 6

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

Ответ 8

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