簡體   English   中英

如何使用Objective-C轉義所有特殊字符以將NSString轉換為JSON

[英]How to convert NSString to JSON by escaping all special characters using Objective-C

我創建了一個函數來制作完美的JSON字符串:

-(NSString *)NSStringToJson:(NSString *)str
{
    NSMutableString *s = [NSMutableString stringWithString:str];
    [s replaceOccurrencesOfString:@"\"" withString:@"\\\\" options:NSCaseInsensitiveSearch range:NSMakeRange(0, [s length])];
    [s replaceOccurrencesOfString:@"/" withString:@"\\/" options:NSCaseInsensitiveSearch range:NSMakeRange(0, [s length])];
    [s replaceOccurrencesOfString:@"\n" withString:@"\\n" options:NSCaseInsensitiveSearch range:NSMakeRange(0, [s length])];
    [s replaceOccurrencesOfString:@"\b" withString:@"\\b" options:NSCaseInsensitiveSearch range:NSMakeRange(0, [s length])];
    [s replaceOccurrencesOfString:@"\f" withString:@"\\f" options:NSCaseInsensitiveSearch range:NSMakeRange(0, [s length])];
    [s replaceOccurrencesOfString:@"\r" withString:@"\\r" options:NSCaseInsensitiveSearch range:NSMakeRange(0, [s length])];
    [s replaceOccurrencesOfString:@"\t" withString:@"\\t" options:NSCaseInsensitiveSearch range:NSMakeRange(0, [s length])];
    [s replaceOccurrencesOfString:@"\{" withString:@"\\{" options:NSCaseInsensitiveSearch range:NSMakeRange(0, [s length])];
    [s replaceOccurrencesOfString:@"}" withString:@"\\}" options:NSCaseInsensitiveSearch range:NSMakeRange(0, [s length])];
    return [NSString stringWithString:s];
}

問題

上面的函數無法將給定的以下字符串轉換為JSON字符串

üáñ~!@#$%^&*()_+-=[\]{}|;’:”,./<>?~

{“ country”:“ 233”,“ email”:“”,“ first_name”:“üáñ〜!@#$%^&*()_ +-= [] |;':”,。/ <>? 〜“,” last_name“:”“,
“ phone_mobile”:“”,“令牌”:“ 111”}

我正在使用JSON在線解析器來驗證字符串,並且解析器顯示錯誤。

這太荒謬了。 使用NSJSONSerialization

您距離需要轉換的所有內容都近在咫尺,並且您正在轉換不需要轉換的內容。 除非您的目標是編寫一個比現有的JSON序列化器更好的JSON序列化器,否則請手動進行此操作,而不是使用專門為您設計的類來進行杯子化。

我不太明白為什么您嘗試轉換帶有兩個反斜杠的雙引號。 當然,您根本不處理字符串中的反斜杠。 那就是問題,您編寫自己的錯誤代碼而不是使用適當的庫。 (另一個問題是您正在編寫錯誤的代碼,我敢打賭您實際上沒有查閱包含JSON標准的RFC)。

如果您使用的是NSURLConnection則可以使用以下代碼

- (void)connectionDidFinishLoading:(NSURLConnection *)connection
  {
    NSError *error;
    NSDictionary *output = [NSJSONSerialization
                            JSONObjectWithData:receivedData
                                       options:kNilOptions
                                        error:&error];
    NSLog(@"output : %@",output);
  }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM