JSON仅在swift中解析特定键

Posted

技术标签:

【中文标题】JSON仅在swift中解析特定键【英文标题】:JSON Parsing only specific keys in swift 【发布时间】:2018-07-23 13:34:44 【问题描述】:

我正在使用 Swift 编程语言开发 ios 应用程序 我有以下 JSON 格式的数据:

 [
"agid": 10,
"alarmStatus": 8,
"alarmTransactions": [
    "alarmTransactionID": 1,
    "systemID": 1,
    "agid": 10,
    "assignedTo": "3969ca82-905b-4df6-a30c-30c64c76f8b0",
    "userName": "Shankar",
    "email": "abc@gmail.com",
    "alarmStatus": 3,
    "alarmDate": "1532359240.1231313213"
, 
    "alarmTransactionID": 2,
    "systemID": 1,
    "agid": 10,
    "assignedTo": "3969ca82-905b-4df6-a30c-30c64c76f8b0",
    "userName": "Satya",
    "email": "xyz@gmail.com",
    "alarmStatus": 4,
    "alarmDate": "1532359240.234234325"
]
]

上面的代码有某些键值对,我只对在下面提到的结构对象中获取“alarmTransactions”数组感兴趣。

struct AlarmHistory: Codable 
    let userName: String
    let alarmStatus: Int
    let alarmDate: Double

下面的代码肯定会失败,因为我的 json 有许多我不感兴趣的其他关键值细节。

do 
     let alarmsHistory = try JSONDecoder().decode([AlarmHistory].self, from: data)
    catch 
     print("Exception: \(error.localizedDescription)")
   

有人可以建议我如何将“alarmTransactions”解析为 [AlarmHistory] ​​对象吗?

【问题讨论】:

您确定您的代码因其他键而失败吗?我认为它失败了,因为您试图将 alarmData 解析为双精度,但在您的 JSON 中它是一个字符串。 我现在更新了json格式。我不关心这种格式。我想解析交易数组。 【参考方案1】:

你可以试试这个

struct AlarmHistory : Codable 
    let agid, alarmStatus: Int
    let alarmTransactions: [AlarmTransaction]


struct AlarmTransaction: Codable 
    let alarmTransactionID, systemID, agid: Int
    let assignedTo, userName, email: String
    let alarmStatus: Int
    let alarmDate: String

//

do 

    let arr = try JSONDecoder().decode([AlarmHistory].self, from: data) 

    print(arr)


catch 

    print(error)

【讨论】:

谢谢。但我不想有另一个结构“AlarmTransaction” 只有这样才能使用 Codable 试试 jsonSerialization

以上是关于JSON仅在swift中解析特定键的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Swift 中解析特定的 JSON

swift 4 使用 Alamofire 解析没有键的 JSON

Swift 4 解析 1+n 数量的 json 数字键

如何从多个JSON对象python的特定键中解析值

swift 3 将 json 数组解析为键值

Swift 3 中的 JSON 解析