1

iOSでJSONデータをURLで送信してサービスを呼び出したい。次のコードを抜粋してみましたが、エンコードされた URL が間違っているようです。JSON では、キーと値の間にコロン文字 (:) と、区切り用のコンマ文字 (,) があるためです。しかし、コロン (:) を%3Aとしてエンコードし、カンマ (,) を%2Cとしてエンコードすることはできません

コードスニペット:

- (NSURL *)getEncodedUrl {

    // Build dictionnary with parameters
    NSString *abc = @"abc";
    NSNumber *limitNumber = [NSNumber numberWithInt:2];
    NSMutableDictionary *dictionnary = [NSMutableDictionary dictionary];
    [dictionnary setObject:limitNumber forKey:@"limit"];
    [dictionnary setObject:abc forKey:@"abc"];

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

    if (!jsonData) {
        debug("Json error %@",error);
        return nil;
    } else {

        NSString *JSONString = [[NSString alloc] initWithBytes:[jsonData bytes] length:[jsonData length] encoding:NSUTF8StringEncoding];
        debug("Json op %@",JSONString);

        NSString* params = [JSONString stringByAddingPercentEscapesUsingEncoding:
                            NSASCIIStringEncoding];

        NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"http://baseUrl.com?param=@",params]];
        debug("URL = %@",url);

        return url;


    }

}

出力:~

URL = http://baseUrl.com?param=%7B%22abc%22:%22abc%22,%22limit%22:2%7D

(コロンとコンマを含む)

しかし、次のo / pが必要です:

http://baseUrl.com?param=%7B%22abc%22%3A%22abc%22%2C%22limit%22%3A2%7D

(コロンとカンマは使用できません)

現在私が参照しているオンライン エンコード/デコード サイト。

http://www.url-encode-decode.com/

4

4 に答える 4

0

使用している GET ではなく、JSON を POST データとして送信することをお勧めします。MIME データとしてパッケージ化する方が簡単で、エンコードを行う方が理解しやすいでしょう。

于 2013-09-05T14:27:30.950 に答える