27

在我的 iPhone 应用程序中,我有一个自定义对象列表。我需要从它们创建一个 json 字符串。我如何使用 SBJSON 或 iPhone sdk 实现这一点?

 NSArray* eventsForUpload = [app.dataService.coreDataHelper fetchInstancesOf:@"Event" where:@"isForUpload" is:[NSNumber numberWithBool:YES]];
    SBJsonWriter *writer = [[SBJsonWriter alloc] init];  
    NSString *actionLinksStr = [writer stringWithObject:eventsForUpload];

我得到空的结果。

4

6 回答 6

58

这个过程现在真的很简单,你不必使用外部库,这样做,(iOS 5 及以上)

NSArray *myArray;
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:myArray options:NSJSONWritingPrettyPrinted error:&error];
NSString *jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
于 2013-11-27T06:17:06.490 回答
11

我喜欢我的类别,所以我做这种事情如下

@implementation NSArray (Extensions)

- (NSString*)json
{
    NSString* json = nil;

    NSError* error = nil;
    NSData *data = [NSJSONSerialization dataWithJSONObject:self options:NSJSONWritingPrettyPrinted error:&error];
    json = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];

    return (error ? nil : json);
}

@end
于 2014-03-20T22:41:29.630 回答
6

尽管投票最高的答案对字典数组或其他可序列化对象有效,但对自定义对象无效。

事情就是这样,您需要遍历数组并获取每个对象的字典表示并将其添加到要序列化的新数组中。

 NSString *offersJSONString = @"";
 if(offers)
 {
     NSMutableArray *offersJSONArray = [NSMutableArray array];
     for (Offer *offer in offers)
     {
         [offersJSONArray addObject:[offer dictionaryRepresentation]];
     }

     NSData *offersJSONData = [NSJSONSerialization dataWithJSONObject:offersJSONArray options:NSJSONWritingPrettyPrinted error:&error];

     offersJSONString = [[NSString alloc] initWithData:offersJSONData encoding:NSUTF8StringEncoding] ;
 }

至于 Offer 类中的 dictionaryRepresentation 方法:

- (NSDictionary *)dictionaryRepresentation
{
    NSMutableDictionary *mutableDict = [NSMutableDictionary dictionary];
    [mutableDict setValue:self.title forKey:@"title"];

    return [NSDictionary dictionaryWithDictionary:mutableDict];
}
于 2015-08-11T11:56:33.960 回答
2

像这样尝试 Swift 2.3

let consArray = [1,2,3,4,5,6]
var jsonString : String = ""
do
{
    if let postData : NSData = try NSJSONSerialization.dataWithJSONObject(consArray, options: NSJSONWritingOptions.PrettyPrinted)
    {
        jsonString = NSString(data: postData, encoding: NSUTF8StringEncoding)! as String
    }
}
catch
{
    print(error)
}
于 2017-02-04T10:26:17.907 回答
0

像这样试试

- (NSString *)JSONRepresentation {
    SBJsonWriter *jsonWriter = [SBJsonWriter new];    
    NSString *json = [jsonWriter stringWithObject:self];
    if (!json)

    [jsonWriter release];
    return json;
}

然后这样称呼,

NSString *jsonString = [array JSONRepresentation];

希望它会帮助你...

于 2013-07-23T12:41:02.140 回答
0

我参加这个聚会有点晚了,但是您可以通过在自定义对象中实现该-proxyForJson方法来序列化一组自定义对象。(或在您的自定义对象的类别中。)

举个例子

于 2014-10-26T20:23:58.693 回答