2013-10-29 10 views
23

NSJSONSerializationがURL文字列に余分なバックスラッシュを追加しないようにするにはどうすればよいですか? 「クイックはありませんようですのでNSJSONSerializationがURLに特別なエスケープを追加しないようにする方法

NSDictionary *info = @{@"myURL":@"http://www.example.com/test"}; 
NSData data = [NSJSONSerialization dataWithJSONObject:info options:0 error:NULL]; 
NSString *string = [[NSString alloc] initWithData:policyData encoding:NSUTF8StringEncoding]; 
NSLog(@"%@", string);//{"myURL":"http:\/\/www.example.com\/test"} 

私はバックスラッシュを取り除くと、その文字列を使用しますが、私は可能であればそのステップをスキップしたいことができます...

+0

あなたはこれに対する解決策を見つけましたか? –

+1

誰かがデバッガでこれを見ているなら、それはおそらくあなたが思うものではありません。 lldbは、文字列を表示および出力するときに、文字列内の特定の文字をエスケープします。 'po ' 'po print()'を実行する代わりに、テストする。 私はその奇妙な人生の3時間を失った。 "\"は実際にはそこにはありません... – BTRUE

+0

@BTRUE ...そしてあなた、先生は、目に見えないミサイルの男です。あなたは私を3時間節約しました。どうもありがとう。 –

答えて

4

うん、これはそれ以上に、非常に刺激性であります「この(NSJSONSerialization用IE)に固定し

ソース:
http://www.blogosfera.co.uk/2013/04/nsjsonserialization-serialization-of-a-string-containing-forward-slashes-and-html-is-escaped-incorrectly/
または
NSJSONSerialization serialization of a string containing forward slashes/and HTML is escaped incorrectly



独自のJSONを作成している場合は、文字列からNSDataオブジェクトを作成してサーバーに送信するだけです。
NSJSONSerializationを経由する必要はありません。

何かのように:

NSString *strPolicy = [info description]; 
NSData *policyData = [strPolicy dataUsingEncoding:NSUTF8StringEncoding]; 

私は、これは私のために働い

+0

リンクをありがとう。暗闇の中のショットについては、jsonの文字列を手動で構築していたのですが、NSJSONSerializationを使用して文字列を作成するのがはるかに簡単です。上記は質問の単なる例です。 – joels

+0

ええ、より多くの変数とパラメータを考慮すると、NSJSONSerializationが簡単であることがわかります。とにかく、これまでの解決策を見つけたら、私はここに返信することを忘れないでください。 – staticVoidMan

18

とにかく...フム...それはそう単純ではなくなりません知っている

NSDictionary *policy = ....; 
NSData *policyData = [NSJSONSerialization dataWithJSONObject:policy options:kNilOptions error:&error]; 
if(!policyData && error){ 
    NSLog(@"Error creating JSON: %@", [error localizedDescription]); 
    return; 
} 

//NSJSONSerialization converts a URL string from http://... to http:\/\/... remove the extra escapes 
policyStr = [[NSString alloc] initWithData:policyData encoding:NSUTF8StringEncoding]; 
policyStr = [policyStr stringByReplacingOccurrencesOfString:@"\\/" withString:@"/"]; 
policyData = [policyStr dataUsingEncoding:NSUTF8StringEncoding]; 
+0

これは\/\ /スマイリーのような文字列にダメージを与えます。 "ここにバックスラッシュの後にスラッシュがあります:\\ /"は "誰でも望むものではない\ /"というバックスラッシュがあります。 –

+3

@LevWalkin "\/\ /"スマイルは "\\/\\ /"としてエンコードされ、 "\ /"を "/"に置き換えると "\/\ /"になります –

関連する問題