2016-05-24 3 views
0

Ich habe eine POST-API, die ich mit meiner App verwenden möchte. Seine erforderlichen Parameter in etwa so aussehen:NSDictionary als JSON-Parameter in einer POST-API senden

parameter/type/field option/sample 

id/int/required/33 
products/json/ required/ [{"id":"PREPAY_22223","quantity":1}] 
card/string/option/123456 

JSONModel Verwendung, Ich versuche, meine Daten mit dieser Methode POST:

- (RACSignal *)discount:(NSString *)planID withProducts:(NSArray *)product withCardf6:(NSString*)cardf6{ 
    NSMutableDictionary *parameters = [self defaultParameters]; 
    parameters[@"id"] = @(planID.intValue); 
    ProductJSON *p = [[EZProductJSON alloc]initWithDictionary:product[0] error:nil]; 
    NSMutableArray *array = [[NSMutableArray alloc]initWithObjects:p, nil]; 
    parameters[@"products"] = array; 
    parameters[@"card"] = cardf6; 
    parameters[@"local"] = @"en_US"; 

return [[[self rac_POST:@"plan/discount" parameters:parameters] map:^id(RACTuple *t) { 
    return t; 
}] catch:^RACSignal *(NSError *error) { 
     return [self customErrorSignal:error]; 
}]; 
} 

Ich halte einen Fehler erhalten, die mir sagt, ich bin mit dem ungültigen Produkt Daten. Ich bin mir nicht sicher warum. Soll ich nur ein NSDictionary statt JSON-Daten einsenden?

Antwort

0

Sie können Array JSON-String konvertieren mit:

NSArray *myArray; 
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:myArray options:NSJSONWritingPrettyPrinted error:&error]; 
NSString *jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding]; 

Und jsonString API-Parameter übergeben ...

So:

- (RACSignal *)discount:(NSString *)planID withProducts:(NSArray *)product withCardf6:(NSString*)cardf6{ 
    NSMutableDictionary *parameters = [self defaultParameters]; 
    parameters[@"id"] = @(planID.intValue); 
    ProductJSON *p = [[EZProductJSON alloc]initWithDictionary:product[0] error:nil]; 
    NSMutableArray *array = [[NSMutableArray alloc]initWithObjects:p, nil]; 
    NSData *jsonData = [NSJSONSerialization dataWithJSONObject:array options:NSJSONWritingPrettyPrinted error:&error]; 
    NSString *jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding]; 
    parameters[@"products"] = array; 
    parameters[@"card"] = cardf6; 
    parameters[@"local"] = @"en_US"; 

return [[[self rac_POST:@"plan/discount" parameters:parameters] map:^id(RACTuple *t) { 
    return t; 
}] catch:^RACSignal *(NSError *error) { 
     return [self customErrorSignal:error]; 
}]; 
} 

Hoffnung das wird Ihnen helfen werden. ....

+0

sollte es Parameter sein [@ "Produkte"] = jsonString; ? –

+0

Ja ............ –

+0

Ich habe es bearbeitet Brett .... –