ios - 在 Swift 4 中解析 JSON 中的 double (例如 1.0)而不丢失小数点?

标签 ios json swift

或者我可以检查一个数字是否被解码为十进制数而不是整数?

if let int = any as? Int {
  print("Object in an integer")        
} else if let num = any as? Double {
  print("Object in a double")
}

,其中“any”是 JSON 文件中的 Any 值并且 = 1.0(不是字符串)。 “any”可以转换为整数和 double (因此我检查的顺序决定结果),但我想保留 JSON 文件中的原始格式。

使用以下行完成解码:

let json = try JSONSerialization.jsonObject(with: data, options: [])

编辑:我尝试检查 CFType,但 1 和 1.0 都得到相同的结果(受到 http://stackoverflow.com/a/30223989/1694526 的启发)

有什么想法吗?

最佳答案

正如 @Sulthan 已经提到的,这在您正在工作的级别上是不可能的,因为 JSONSerialization 将并且应该使用单个类来表示值,并且可能无法确定其类型。

您可以尝试寻找其他工具来检查值,但这真的有意义吗?

  1. 您正在尝试查找 IntDouble 之间的差异,但是 64 位或 32 位呢?或者签名和未签名?我们通常不会将它们写入字符串,因此实际上无法区分它们。所以这样做确实没有一般逻辑。
  2. 您确定返回的 JSON 始终会为这些值附加“.0”吗?这实际上取决于系统,最小的优化会消除这一点,因为 JSON 标准不包括数字精度。例如,如果我使用 JSONSerialization 并打印出 String(data: (try! JSONSerialization.data(withJSONObject: [ "value": 1.0 ], options: .prettyPrinted)), encoding: 。 utf8) 我收到:{\n\"value\": 1\n} 这意味着它无论如何都会修剪“.0”。
  3. 我发现很难理解这在结构上会有什么好处。例如,如果您需要将这些数据保存到数据库中,则需要定义用于保存数据的基元的大小和类型。如果您需要使用一些算术,您再次需要指定类型...

唯一的方法是将其用作显示字符串。但在这种情况下,您的值应该作为字符串而不是数字返回。

关于ios - 在 Swift 4 中解析 JSON 中的 double (例如 1.0)而不丢失小数点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48338800/

相关文章:

ios - 如何将位置添加到日历条目?

javascript - 如何在 window.setInterval 中每分钟运行一次 getJSON 函数?

java - JSON 中 map 的带点路径 (Java)

ios - 如何从 iOS 应用程序打开 Google 地球中的 KMZ 文件

ios - UITableView 返回空白单元格

swift - 在 SwiftUI View 中实现委托(delegate)

c++ - Qt设置iOS屏幕方向

ios - 如何在 Swift 中调用 Objective C UIView 的 initWithFrame

ios - Swift UIPageViewController 和 UIActivityIndi​​catorView

php - 读取由 PHP 生成的包含 @attributes 的 JSON(使用 jQuery)