微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何将我的数据转换为 JSON 格式 - 健康应用

如何解决如何将我的数据转换为 JSON 格式 - 健康应用

我对 swift 很陌生。
我需要创建以下 JSON 格式

{   "items" : [

    “BloodPressure:” {

      "endDate" : "2020-01-25",“systolicValue” : "122","diastolicValue" : "62"
      "startDate" : "2020-01-25"
    },“HeartRate:” {

      "endDate" : "2020-01-25",“Value” : "78","startDate" : "2020-01-25"
    },“BMI:” {

      "endDate" : "2020-01-25",“Value” : "23","startDate" : "2020-01-25"
    }     
  ]
 }


目前我正在使用 enum 将我的数据转换为 JSON 格式。问题是我的血压有不同的键(收缩压和舒张压)。我还需要显示诸如“项目”、“血压”、“HearRate”之类的键名。
我怎样才能实现我想要的 JSON 格式???

enum HealthDataType: String,Codable {
    case bloodPressure
    case heartRate
    case bmi
}
struct HealtDataItem: Codable {
    let endDate: Date
    let value: Double
    let startDate: Date
    let type: HealthDataType
}

let bloodPressureItem = HealtDataItem(endDate: end,value: bloodPressureValue,startDate: start,type: .bloodPressure)
let bmiItem = HealtDataItem(endDate: end,value: bmiValue,type: .bmi)

let healthData = [bloodPressureItem,bmiItem]

do {
    let data = try JSONEncoder().encode(healthData)
} catch { 
     //error handling
}

解决方法

如果您要创建 JSON 模型,我建议您使用 quicktype.io,它可以为您快速生成合适的 JSON 模型类。

我发现您在问题中提供的 JSON 模型格式错误,因此我已修复错误,但是您应该确保附加的 JSON 与您在应用中使用的相同:

固定的 JSON 模型

{   "items" : [

   { "BloodPressure": {

      "endDate" : "2020-01-25","systolicValue" : "122","diastolicValue" : "62","startDate" : "2020-01-25"
        }
    },{"HeartRate": {

      "endDate" : "2020-01-25","Value" : "78","startDate" : "2020-01-25"
      }
    },{ "BMI": {

      "endDate" : "2020-01-25","Value" : "23","startDate" : "2020-01-25"
     }     
    }
  ]
 }

我能够在 quicktype.io 中使用上述 JSON,结果是您在下面看到的模型结构。如您所见,BloodType 数据类型考虑了 systolicValue 和 diastolicValue。为了便于阅读,我从默认的 quicktype.io 命名中重命名了一些模型结构,以提高项目的可读性。

JSON 模型结构

struct HealthData: Codable {
    let metrics: [Metric]
}

// MARK: - Item
struct Metric: Codable {
    let bloodPressure: BloodPressure?
    let heartRate,bmi: Bmi?

    enum CodingKeys: String,CodingKey {
        case bloodPressure = "BloodPressure"
        case heartRate = "HeartRate"
        case bmi = "BMI"
    }
}

// MARK: - BloodPressure
struct BloodPressure: Codable {
    let endDate,systolicValue,diastolicValue,startDate: String
}

// MARK: - Bmi
struct Bmi: Codable {
    let endDate,value,startDate: String

    enum CodingKeys: String,CodingKey {
        case endDate
        case value = "Value"
        case startDate
    }
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。