2

我在 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];

在红宝石方面:

jsonObj // contains exactly the same content as the objc version
string = JSON.generate(jsonObj)

我遇到的问题是 Ruby 的 JSON.generate() 不会以与 iOS 上的 NSJSONSerialization 相同的格式输出 JSON 字符串。有什么方法可以让它们表现得一样吗?或者我可以使用另一种序列化方法在 iOS 和 Rails 上获得一致的结果吗?

我发现两者之间的一个区别是原始对象中包含文本“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"}'"

我还将两个输出都写入文件并再次比较它们,结果相同。

4

0 回答 0