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

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 に答える
0

このパーティーには少し遅れましたが、カスタム オブジェクトに-proxyForJsonメソッドを実装することで、カスタム オブジェクトの配列をシリアル化できます。(または、カスタム オブジェクトのカテゴリで。)

たとえば. _

于 2014-10-26T20:23:58.693 に答える
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 に答える