iOS に JSON ドキュメントがあり、Rails に同じドキュメントがあります。iOS でシリアル化するときは、Rails からシリアル化された文字列と同じ文字単位である必要があります。ただし、これを試してみると、出力はほとんど同じですが、まったく同じではありません。
iOS の場合:
id jsonObj;
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:jsonObj options:0 error:nil];
NSString *string = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
Ruby 側:
jsonObj // contains exactly the same content as the objc version
string = JSON.generate(jsonObj)
私が抱えている問題は、Ruby の JSON.generate() が iOS の NSJSONSerialization と同じ形式で JSON 文字列を出力しないことです。それらを同じように動作させる方法はありますか?または、iOS と Rails で一貫した結果を得るために使用できる別のシリアル化方法はありますか?
私が見つけた 2 つの違いの 1 つは、元のオブジェクトに「N/A」というテキストが含まれていたことです。Rails はこれをそのまま出力しますが、iOS は "N\ /A" にエスケープします。これを修正するために iOS 側で使用できる別の文字列エンコーディング オプションはありますか?
編集:
より良い例を次に示します。
id json = @{ @"str": @"N/A" };
NSError *error = nil;
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:json options:0 error:&error];
NSString *jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
NSLog(@"jsonString = '%@'", jsonString);
// prints "jsonString = '{"str":"N\/A"}'"
そして同等のルビー:
json = { "str" => "N/A" }
jsonString = JSON.generate(json)
puts "jsonString = '#{jsonString}'"
// prints "jsonString = '{"str":"N/A"}'"
また、両方の出力をファイルに書き込んで再度比較しましたが、結果は同じでした。