web-dev-qa-db-ja.com

NSDictionaryをjson文字列に変換する際の問題、/を\ /に置き換え

nSDictionaryをjson文字列に変換したいのですが、すべてが正常に機能しています。次のように小さな問題があります。

-(NSString *)dictToJson:(NSDictionary *)dict
{
    NSData *jsonData = [NSJSONSerialization dataWithJSONObject:dict options:NSJSONWritingPrettyPrinted error:nil];
   return  [[NSString alloc] initWithBytes:[jsonData bytes] length:[jsonData length] encoding:NSUTF8StringEncoding];
}

私はメソッドを次のように呼び出しています:

NSLog(@"%@", [self dictToJson:@{@"hello" : @"21/11/2014 10:07:42 AM"}]);

以下は、このNSLogの出力です。

{
  "hello" : "21\/11\/2014 10:07:42 AM"
}

次の出力を期待していますが、どのようにして達成できますか?

{
      "hello" : "21/11/2014 10:07:42 AM"
}

stringByReplacingOccurrencesOfStringメソッドを使用して実行できますが、これを使用したくありません。同じことを達成する他の方法はありますか?

9
Faisal Ikwal

JSONオブジェクトを文字列に変換すると、スラッシュがエスケープされます。そのため、バックスラッシュが結果に追加されます。

文字列をJSONオブジェクトに変換してログに記録すると、期待どおりの結果が得られます。したがって、文字列に問題はないことを確認できます。

0
user4226071

Nsdictionary-to-string

NSError * err;
NSData * jsonData = [NSJSONSerialization dataWithJSONObject:response options:0 error:&err];
NSString * myString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];

string-to-NSDictionary

NSError * err;
NSDictionary * response = (NSDictionary *)[NSJSONSerialization JSONObjectWithData:[NSData dataFromString:str] options:NSJSONReadingMutableContainers error:&err];
22
rahulchona

これを試して、

NSData *json = [NSJSONSerialization dataWithJSONObject:dict
                                               options:0
                                                 error:&error];
NSString *jsonString = [[NSString alloc] initWithData:json encoding:NSUTF8StringEncoding];
// This will be the json string in the preferred format 
jsonString = [jsonString stringByReplacingOccurrencesOfString:@"\\/" withString:@"/"];

// And this will be the json data object 
NSData *processedData = [jsonString dataUsingEncoding:NSUTF8StringEncoding];
2
Alex Andrews

PrettyPrintedオプションを使用してDataへの応答に変換し、次にutf8エンコーディングコードを使用してDataを文字列に変換します。

    NSDictionary *dictResponse = responseObject[0];

    NSData *jsonData = [NSJSONSerialization dataWithJSONObject:dictResponse options:NSJSONWritingPrettyPrinted error:nil];


    NSString * myString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
1
Jatin Rathod

これを追加

 -(NSString*) bv_jsonStringWithPrettyPrint:(BOOL) prettyPrint;  




-(NSString *)dictToJson:(NSDictionary *)dict {

     NSData *jsonData = [NSJSONSerialization dataWithJSONObject: dict
                                                   options:(NSJSONWritingOptions)    (prettyPrint ? NSJSONWritingPrettyPrinted : 0)
                                                     error:&error];

     if (!jsonData) {
        NSLog(@"bv_jsonStringWithPrettyPrint: error: %@", error.localizedDescription);
        return @"{}";
     } else {
        return [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
     } 

 }

これを参照してください iOSのNSDictionaryからJSON文字列を生成

0
Sport