JSON 从字符串到 float 的转换值

标签 json swift

我有一个 Json(接收为文本),我将它转换成这样:

if let jsonData = raw.data(using: String.Encoding.utf8) {
   if let json = try JSONSerialization.jsonObject(with: jsonData, options: .allowFragments) {
      let products = json["products"] as! [Dictionary<String, AnyObject>]

Products 包含一个产品数组(也是 json),其中我有键,其值可以是 String、Float、Double...一个键有一个值,它可以是任何类型的数字。

当从端点接收文本时,该字段看起来像这样:\"min_size\":\"0.01\" 但也可以有类似 \"min_size\"的值:\"1\",或 \"min_size\":\"0.001\"。在我的 json 转换后看起来像这样(使用 po 打印):

▿ 1 : 2 elements
  - key : "min_size"
  - value : 1

或者

▿ 15 : 2 elements
  - key : "min_size"
  - value : 0.01

但是,当我尝试在我的代码中访问它时(我想将它作为 float 读取,独立地读取它是 1 还是 0.01),我得到了这个:

let k = item["min_size"] // contains > ▿ Optional<Any> - some : 0.01
let i = item["min_size"] as? Float // contains > nil
let j = item["min_size"] as? Int // contains > nil

let y = item["min_size"] as? NSString // contains > "0.01"
let z = y!.floatValue // contains > "0.009999997"

我是 Swift 的新手,我不明白这里发生了什么。

  • 为什么我不能直接将值(1 或 0.01)转换为 float ?
  • 如果不是,我该怎么做才能获得该字段的 float ?
  • 最重要的 对我来说很奇怪...为什么要转换为“0.01”的 NSString value 和 floatValue,结果不一样?舍入不是 选项,因为它也可能是一个很长的小数。它可以是任何小数或整数。

知道我做错了什么吗?

最佳答案

根据评论中的建议,我实现的解决方案是:

let min_size = (item["min_size"] as? String ?? "").convertFromJSONStringToFloat()

我有两个字符串和 float 的扩展

extension String {
    func convertFromJSONStringToFloat() -> Float? {
        let partNumber = self.split(separator: ".")
        return (Float(self)?.roundToDecimal((partNumber.count > 1) ? partNumber[1].count : 1))!
    }
}

extension Float {
    func roundToDecimal(_ fractionDigits: Int) -> Float {
        let multiplier = pow(10, Double(fractionDigits))
        return Float((Double(self) * multiplier) / multiplier)
    }
}

关于JSON 从字符串到 float 的转换值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66274294/

相关文章:

ios - 在 Collection View 中显示长单元格(如矩形)时出现问题

arrays - 如何在 Swift 中合并两个自定义类型数组并删除重复的自定义类型项?

ios - 如何为 tableview 上的 webview 内容启用 VoiceOver

c++ - 如何以惯用的方式实现 C++ 序列化程序?

json - 错误 404.3 未找到 JSON 文件

java - 使用 JSON、REST、Spring Boot JAVA POST 数据

swift - 在 Swift 中调整 UIVisualEffectView 中模糊效果的强度

xcode - 你能在两个 View 之间共享一个导出吗?

找不到 json 语言文件 ngx-translate angular-cli

json - 如何从 Protractor 中的嵌套 JSON 结构读取数据