2012-10-09 49 views
0

我对Mac开发非常陌生,并且遇到了一些麻烦,寻找好的资源。我目前的问题是一个自定义的Objective-C类对象序列化为JSON。将OSX的objective-c自定义对象序列化为JSON?

我知道在苹果库中有一个内置的序列化程序,但那个程序只能与Foundation对象一起使用。

在我来说,我有我自己的类,看起来像这样:

@interface SomeClass : NSObject 
{ 
    int a; 
    int b; 
    NSString *aa; 
    NSString *bb; 
} 
@property int a,b; 
@property NSString *aa,*bb; 

@end 

如果有人知道如何这种类型的结构序列化到JSON,请给我一个提示!任何类型的相关信息都会有帮助!谢谢!

+0

你怎么想序列化的图像?你想在JSON中嵌入图像数据,可能是PNG或JPEG格式? –

+0

哦...对不起...我将它改为只是简单的NSString * imageName –

回答

2

如果你只是要序列包含整数和字符串对象,最简单的方法是创建NSJSONSerialization支持的数据结构和序列化:

static const NSString *kAKey = @"a"; 
static const NSString *kBKey = @"b"; 
static const NSString *kAaKey = @"aa"; 
static const NSString *kBbKey = @"bb"; 

- (id)JSONObject { 
    return @{ 
     kAKey: @(self.a), 
     kBKey: @(self.b), 
     kAaKey: self.aa, 
     kBbKey: self.bb 
    }; 
} 

- (NSData *)JSONData { 
    return [NSJSONSerialization dataWithJSONObject:[self JSONObject] options:0 error:NULL]; 
} 
+0

谢谢,罗!我会试试这个! –

0

我一直在寻找这个过去周。我决定写我自己的解决方案。它非常简单,并建立在现有的Apple功能上。

在这里看到:https://github.com/gslinker/GSObject

在这里:http://digerati-illuminatus.blogspot.com/2016/01/objective-c-and-json-convert-subclass.html

为您的数据模型对象已经从GSObject而不是NSObject的继承。这里是ThingOne与来自GSObject继承的例子:

ThingOne* object1 = [[ThingOne alloc] init]; 
object1.name = @"John Jones"; 


NSData* jsonData1 = [object1 toJsonDataWithOptions:NSJSONWritingPrettyPrinted]; 
NSString *jsonString1 = [object1 toJsonStringWithOptions:NSJSONWritingPrettyPrinted]; 

NSDictionary<NSString *,id> *dict1 = [GSObject dictionaryWithValues:object1]; 

NSString *roundTripJson1 = [object1 toJsonStringWithOptions:NSJSONWritingPrettyPrinted]; 




// 
// ThingOne.h 
// JasonStuff 
// 
// Created by Geoffrey Slinker on 12/28/15. 
// Copyright © 2015 Slinkworks LLC. All rights reserved. 
// 

#import <Foundation/Foundation.h> 
#import "GSObject.h" 
#import "ThingTwo.h" 

@interface ThingOne : GSObject 

@property (nonatomic, retain) NSString *name; 
@property (nonatomic, retain) ThingTwo *thingTwo; 
@property (nonatomic, retain) NSArray *values; 
@property (nonatomic, retain) NSDictionary *dict; 
@property int myInt; 
@property float myFloat; 
@property BOOL myBool; 
@property (nonatomic, retain) NSNumber* someMoney; 


@end 

// 
// ThingOne.m 
// JasonStuff 
// 
// Created by Geoffrey Slinker on 12/28/15. 
// Copyright © 2015 Slinkworks LLC. All rights reserved. 
// 

#import "ThingOne.h" 

@implementation ThingOne 

@synthesize name; 
@synthesize thingTwo; 
@synthesize values; 
@synthesize dict; 
@synthesize myInt; 
@synthesize myFloat; 
@synthesize myBool; 
@synthesize someMoney; 

- (instancetype)init 
{ 
self = [super init]; 

thingTwo = [[ThingTwo alloc] init]; 

thingTwo.stuff = @"Thing Two Stuff"; 
thingTwo.someOtherStuff = @"Thing Two Other Stuff"; 
NSDateFormatter *dateFormater = [[NSDateFormatter alloc]init]; 
[dateFormater setDateFormat:@"yyyy-mm-dd"]; 
thingTwo.someDate = [dateFormater dateFromString:@"1963-10-07"]; 

values = [NSArray arrayWithObjects:@"Value1", @"Value2", @"Value3", nil]; 

dict = [NSDictionary dictionaryWithObjectsAndKeys:@"value1", @"key1", @"value2", @"key2", nil]; 

myInt = 5431; 
myFloat = 123.456f; 
myBool = YES; 

someMoney = [NSNumber numberWithInt:503]; 

return self; 
} 

@end 

// 
// ThingTwo.h 
// JasonStuff 
// 
// Created by Geoffrey Slinker on 12/28/15. 
// Copyright © 2015 Slinkworks LLC. All rights reserved. 
// 

#import <Foundation/Foundation.h> 
#import "GSObject.h" 

@interface ThingTwo : GSObject 

@property (nonatomic, retain) NSString *stuff; 
@property (nonatomic, retain) NSString *someOtherStuff; 
@property (nonatomic, retain) NSDate *someDate; 
@property (nonatomic, retain) NSString *nullString; 
@property (nonatomic, retain) NSDate *nullDate; 

@end 

// 
// ThingTwo.m 
// JasonStuff 
// 
// Created by Geoffrey Slinker on 12/28/15. 
// Copyright © 2015 Slinkworks LLC. All rights reserved. 
// 

#import "ThingTwo.h" 

@implementation ThingTwo 

@synthesize stuff; 
@synthesize someOtherStuff; 
@synthesize someDate; 

- (instancetype)init 
{ 
self = [super init]; 

someDate = [NSDate date]; 

return self; 
} 

@end 

这里是JSON输出的一个例子:

{ 
    "values" : [ 
    "Value1", 
    "Value2", 
    "Value3" 
    ], 
    "myInt" : 5431, 
    "myFloat" : 123.456, 
    "myBool" : true, 
    "someMoney" : "$503.00", 
    "thingTwo" : { 
    "stuff" : "Thing Two Stuff", 
    "nullDate" : null, 
    "someDate" : "1963-01-07 07:10:00 +0000", 
    "nullString" : null, 
    "someOtherStuff" : "Thing Two Other Stuff" 
    }, 
    "name" : "John Jones", 
    "dict" : { 
    "key1" : "value1", 
    "key2" : "value2" 
    } 
} 
相关问题