1

私はiOSが初めてです。私はこのようなものを作成しましたJSON NSDictionary:

NSArray *keys = [NSArray arrayWithObjects:@"User", @"Password", nil];
NSArray *objects = [NSArray arrayWithObjects:@"Ali", @"2020", nil];
NSDictionary *jsonDictionary = [NSDictionary dictionaryWithObjects:objects forKeys:keys];

そして、次NSStringの 2 つのメカニズムを介して変換できます。

1)

NSError *error; 
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:jsonDictionary options:0 error:&error];

NSString *jsonString = nil;
if (! jsonData) {
     NSLog(@"Got an error: %@", error);
} else {
     jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
}

2)

NSString *jsonString = [jsonDictionary JSONRepresentation];

2番目の方法でこれを取得しますwarning:

Instance method '-JSONRepresentation' not found (return type defaults to 'id')

しかし、プロジェクトを実行すると、両方のメカニズムが正常に機能します。

NSLog(@"Val of json parse obj is %@",jsonString); 

2番目の方法で警告を削除する方法を知っていますか?

私の主な目標はPOST、RESTful Web サービスを使用して、この json 文字列を外部データベースに渡すことです。私の主な目標を考えると、基本的にどちらの方法が良いですか?

4

5 に答える 5

9

NSJSONSerialization「ターゲットオーディエンス」がiOS5+である限り、より高速でiOS SDKに直接付属しているため、使用する必要があります

データをWebサービスにPOSTするには、これらの行に沿ってリクエストを作成する必要があります...

NSDictionary * postDictionary = [NSDictionary dictionaryWithObjects:[NSArray arrayWithObjects:@"value1", @"value2", nil]
                                                                  forKeys:[NSArray arrayWithObjects:@"key1", @"key2", nil]];

NSError * error = nil;
NSData * jsonData = [NSJSONSerialization dataWithJSONObject:postDictionary options:NSJSONReadingMutableContainers error:&error];

NSMutableURLRequest * urlRequest = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"your_webservice_post_url"]];
[urlRequest setValue:@"application/json" forHTTPHeaderField:@"Accept"];
[urlRequest setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
[urlRequest setHTTPMethod:@"POST"];
[urlRequest setHTTPBody:jsonData];

NSURLConnection * myConnection = [[NSURLConnection alloc] initWithRequest:urlRequest delegate:self startImmediately:YES];

NSURLConnectionDelegate プロトコルを読んでください。

于 2012-08-09T12:44:39.063 に答える
4

iOS 5.0 > の場合:

次のようにNSJSONSerializationを使用します。

NSError *error;
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:dictionary options:NSJSONWritingPrettyPrinted error:&error];
NSString *resultAsString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
 NSLog(@"jsonData as string:\n%@ Error:%@", resultAsString,error);

< iOS 5 の場合:

json-frameworkを使用して、カテゴリを使用NSDictionaryして json 文字列を提供するサードパーティ ライブラリを使用します。

 NSString *jsonString = [dictionary JSONRepresentation];

 //with options
 NSString *jsonString = [dictionary JSONStringWithOptions:JKSerializeOptionNone error:nil]
于 2012-08-09T11:59:34.433 に答える
1

SBJsonを使用して NSDictionary を JSON に変換する

于 2012-08-09T11:47:19.970 に答える
0
JSON DEFAULT METHOD......

+(NSDictionary *)stringWithUrl:(NSURL *)url postData:(NSData *)postData httpMethod:(NSString *)method { 

NSDictionary *returnResponse=[[NSDictionary alloc]init];

@try {
 NSMutableURLRequest *urlRequest = [NSMutableURLRequest requestWithURL:url cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:180]; [urlRequest setHTTPMethod:method];

if(postData != nil)
{
    [urlRequest setHTTPBody:postData];
}

[urlRequest setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
[urlRequest setValue:@"application/json" forHTTPHeaderField:@"Accept"];
[urlRequest setValue:@"text/html" forHTTPHeaderField:@"Accept"];

NSData *urlData;
NSURLResponse *response;
NSError *error;
urlData = [NSURLConnection sendSynchronousRequest:urlRequest
                                returningResponse:&response
                                            error:&error];
returnResponse = [NSJSONSerialization
                  JSONObjectWithData:urlData
                  options:kNilOptions
                  error:&error];
} @catch (NSException *exception) { returnResponse=nil; } @finally { return returnResponse; } }

Return Method :

+(NSDictionary )methodName:(NSString)string { 
NSDictionary *returnResponse; NSData *postData = [NSData dataWithBytes:[string UTF8String] length:[string length]]; NSString *urlString = @"https//:..url...."; returnResponse=[self stringWithUrl:[NSURL URLWithString:urlString] postData:postData httpMethod:@"POST"];
return returnResponse; 
}
于 2015-11-26T17:07:44.453 に答える
0

この方法を使用してください。

 NSArray *keys = [NSArray arrayWithObjects:@"User", @"Password", nil];
 NSArray *objects = [NSArray arrayWithObjects:@"Ali", @"2020", nil];
 NSDictionary *jsonDictionary = [NSDictionary dictionaryWithObjects:objects forKeys:keys];

 NSError *error = nil;
 // NSError *error; 
 NSData *jsonData = [NSJSONSerialization dataWithJSONObject:jsonDictionary options:0 error:&error];


 id result = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingMutableContainers error:&error];

 NSLog(@"\n\n\n id for json==%@ \n\n\n\n\n",result);
于 2012-08-09T11:59:35.777 に答える