首页 > 解决方案 > 将值从 JSON 存储到变量

问题描述

所以我的项目有一个小问题。这是我正在运行以获取 JSON 值的当前函数:

func makeCommand_GetCS() {
        if let vehicle = vehicle {
             _ = api.gVV(vehicle).done {
                 (chargeState: ChargeState) -> Void in
                        
                 self.responseView.text = "Charger max current: \(String(describing: chargeState.chargerPilotCurrent))\n\(chargeState.jsonString!)"
                        
              }  
        }
}

这个函数给了我以下 JSON 字符串:

charger max current: Optional(13)
{
  "fast_charger_type" : "MCSingleWireCAN",
  "timestamp" : 1624456289921,
  "est_battery_range" : 205.99000000000001,
  "charge_energy_added" : 5.5099999999999998,
  "charge_current_request_max" : 13,
  "fast_charger_brand" : "<invalid>",
  "charger_phases" : 1,
  "fast_charger_present" : false,
  "battery_heater_on" : false,
  "time_to_full_charge" : 0,
  "charge_current_request" : 7,
  "battery_range" : 235.06999999999999,
  "managed_charging_active" : false,
  "charge_port_door_open" : true,
  "charge_limit_soc_std" : 90,
  "charger_actual_current" : 0,
  "charge_port_latch" : "Engaged",
  "charge_enable_request" : true,
  "charger_voltage" : 2,
  "trip_charging" : false,
  "charger_pilot_current" : 13,
  "charge_rate" : 0,
  "conn_charge_cable" : "IEC",
  "charge_limit_soc_max" : 100,
  "charge_limit_soc_min" : 50,
  "usable_battery_level" : 89,
  "ideal_battery_range" : 235.06999999999999,
  "max_range_charge_counter" : 0,
  "charger_power" : 0,
  "scheduled_charging_pending" : false,
  "charge_miles_added_rated" : 27,
  "battery_level" : 90,
  "charge_to_max_range" : false,
  "charge_port_cold_weather_mode" : false,
  "charge_miles_added_ideal" : 27,
  "managed_charging_user_canceled" : false,
  "charge_limit_soc" : 77,
  "charging_state" : "Complete"
}

如何仅从中获取值charge_limit_soc并将其存储为int变量?

编辑:ChargeState.swift:https ://pastebin.com/Z3vJsD77

标签: jsonswift

解决方案


基于您在上面发布的此文件https://pastebin.com/Z3vJsD77

您可以直接chargeLimitSOC从此模型访问该属性,如下所示 -

let chargeLimitSOC = chargeState.chargeLimitSOC

模型中的相关部分在这里 -

open class ChargeState: Codable {
    open var chargeLimitSOC: Int?
    
    enum CodingKeys: String, CodingKey {
        case chargeLimitSOC = "charge_limit_soc"
    }
}

推荐阅读