Есть ли эквивалент gson в Objective-C?
Спасибо.
Есть ли эквивалент gson в Objective-C?
Спасибо.
DCKeyValueObjectMapping https://github.com/dchohfi/KeyValueObjectMapping не является парсером JSON, а является объектно-json-преобразователем для вставки свойств NSObject из NSDictionary/NSArray.
Недавно я использовал Mantle, который отлично работает и очень похож на GSON (который используется для проектов Android).
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];
В 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.
На 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)
больше информации: кодирование и декодирование пользовательских типов
OCMapper - лучшая из известных мне и самая легкая библиотека, она также имеет обратное отображение и отображает сложные объекты без необходимости конфигурирования, а также работает с realmObjects.
Да - см. http://psionides.jogger.pl/2010/03/04/cocoa-json-parsing-libraries/
Я думаю, что я нашел несколько библиотек, которые могут служить для этой цели, но наиболее важным является RestKit