【问题标题】:Append String with NSURL使用 NSURL 附加字符串
【发布时间】:2013-01-29 07:26:14
【问题描述】:

我有以下字符串,我想用NSURL 附加,在附加后我想在NSURL 中得到结果

{ "deviceid":"3c27c99ac4b159aca81de8f5d266478f00000000 ","nickname":"sad","gender":0,"marital":0,"children":1,"job":"asd","message": "Asd","pushid":"3c27c99ac4b159aca81de8f5d266478f00000000"}

可以,请任何人帮助我。 提前致谢。

【问题讨论】:

    标签: nsstring nsurl


    【解决方案1】:

    您尚未说明最终 URL 的外观,因此我假设您希望将记录字符串中的名称和值作为查询字符串添加到原始 URL。

    当给定一个基本 URL 和字符串时,以下方法将返回一个组合 URL:

    -(NSURL *)URLWithRecord:(NSString *)record relativeToURL:(NSURL *)originalURL
    {
        NSCharacterSet * unwantedDelimeters = [NSCharacterSet characterSetWithCharactersInString:@"{}"];
        NSCharacterSet * fieldSeperator = [NSCharacterSet characterSetWithCharactersInString:@","];
        NSCharacterSet * nameValueSeperator = [NSCharacterSet characterSetWithCharactersInString:@":"];
        NSCharacterSet * quotes = [NSCharacterSet characterSetWithCharactersInString:@"\""];
    
    
        record = [record stringByTrimmingCharactersInSet:unwantedDelimeters];
        NSArray * fields = [record componentsSeparatedByCharactersInSet:fieldSeperator];
    
        NSMutableString * queryString = [NSMutableString stringWithString:@"?"];
    
        for (NSUInteger fieldCount = 0; fieldCount < [fields count]; fieldCount++) {
    
            NSString * field = [fields objectAtIndex:fieldCount];
    
            NSArray * nameValue = [field componentsSeparatedByCharactersInSet:nameValueSeperator];
            NSString * name = [[nameValue objectAtIndex:0] stringByTrimmingCharactersInSet:quotes];
            NSString * value = [[nameValue objectAtIndex:1] stringByTrimmingCharactersInSet:quotes];
    
            if (fieldCount == ([fields count]-1) ) {
                [queryString appendFormat:@"%@=%@", name, value];
            } else {
                [queryString appendFormat:@"%@=%@&", name, value];
            }
        }
    
        NSURL * combinedURL = [NSURL URLWithString:queryString relativeToURL:originalURL];
        return combinedURL;
    }
    

    使用以下代码进行测试时:

    NSURL * originalURL = [NSURL URLWithString:@"http://www.example.com"];
    NSString * string = @"{\"deviceid\":\"3c27c99ac4b159aca81de8f5d266478f00000000\",\"nickname\":\"sad\",\"gender\":0,\"marital\":0,\"children\":1,\"job\":\"asd\",\"message\":\"Asd\",\"pushid\":\"3c27c99ac4b159aca81de8f5d266478f00000000\"}";
    
    NSURL * combinedURL = [self URLWithRecord:string relativeToURL:originalURL];
    NSLog(@"result=\"%@\"", [combinedURL absoluteString]);
    

    输出是:

    result="http://www.example.com?deviceid=3c27c99ac4b159aca81de8f5d266478f00000000&nickname=sad&gender=0&marital=0&children=1&job=asd&message=Asd&pushid=3c27c99ac4b159aca81de8f5d266478f00000000"
    

    所提供的方法假定记录字符串中没有错误的空格,并且记录中的名称和值仅包含 ASCII 数字和字母。如果记录包含包含 URL 问题字符(例如空格)的名称或值,它将返回 nil 值。如果您怀疑会涉及到此类字符,则需要相应地重写方法-replacing such characters with URL escape codes

    【讨论】:

    • 优秀。如果您对答案感到满意,请不要忘记勾选(复选标记)。
    • 我也收到了正确的 queryString 和 originalUrl 但combinedURL 返回为零。(NSURL *) combinedURL = 0x3547d037 以下是在日志中打印。
    • 我想要这种格式的最终​​网址,这可能吗?,请帮助 result="example.com?updateProfile={ "deviceid":"3c27c99ac4b159aca81de8f5d266478f00000000 ","nickname":"adrfg","gender ":0,"marital":0,"children":1,"job":"asf","message":"Sdf","pushid":"3c27c99ac4b159aca81de8f5d266478f00000000"}
    • 仅当您转义不是allowed in a URL 的字符时,例如引号。当你这样做时,你最终会得到类似“example.com?updateProfile=%7B%22deviceid%22%3A%223c27c99ac4b159aca81de8f5d266478f00000000%22%2C%22nickname%22%3A%22adrfg%222C%22gender%22%3A02C% 22marital%22%3A02C%22children%22%3A12C%22job%22%3A%22asf%222C%22message%22%3A%22​Sdf%222C%22pushid%22%3A%223c27c99ac4b159aca81de8f5d266478f00000000%22%链接在答案的底部了解更多关于 URL 转义码的信息)。
    【解决方案2】:
    NSString *str=@"";
    
    NSString *str1=@"\"deviceid\":\"3c27c99ac4b159aca81de8f5d266478f00000000 \",\"nickname\":\"sad\",\"gender\":0,\"marital\":0,\"children\":1,\"job:\"asd\",\"message\":\"Asd\",\"pushid\":\"3c27c99ac4b159aca81de8f5d266478f00000000\""; 
    
    NSURL *url=[NSURL URLWithString:@"give your url"];
    
    NSArray *components = [url pathComponents]; 
    
    for (NSString *c in components)    
    {
        str=[str stringByAppendingString:c];  
    }   
    str=[str stringByAppendingString:str1];
    
    NSURL *newurl=[NSURL URLWithString:@"str"];    
    

    【讨论】:

      猜你喜欢
      • 2014-10-10
      • 2014-09-29
      • 1970-01-01
      • 2012-03-30
      • 2011-08-10
      • 1970-01-01
      • 2011-02-10
      • 2019-03-31
      相关资源
      最近更新 更多