【问题标题】:How to parse part of json data into table如何将部分json数据解析成表
【发布时间】:2020-04-06 21:29:47
【问题描述】:

如何解析以下我只想解析的部分的json。

```
{
      "head": {
        "StatusValue": 200,
        "StatusText": "Success"
      },
      "body": {
        "Data": [
          {
            "payer_type_id": 1,
            "payer_type": "Self Pay"
          },
          {
            "payer_type_id": 2,
            "payer_type": "Corporate"
          },
          {
            "payer_type_id": 6,
            "payer_type": "Insurance"
          }
        ],
        "RecordCount": 3,
        "TotalRecords": null
      }
}

如何仅解析 Data 键中的数据。

预期结果应采用以下格式

Date = [["payer_type_id": 1,"payer_type": "Self Pay"],["payer_type_id": 2,"payer_type": "Corporate"],["payer_type_id": 6,"payer_type": "Insurance"]]

【问题讨论】:

标签: ios json swift parsing url


【解决方案1】:

试试这个:

    let jsonString = "your json string here"
    let dictObject = getDictionaryFromJsonString(dictString: jsonString)
    let bodyDict = dictObject["body"]
    let dataArray = bodyDict["Data"]

   func getDictionaryFromJsonString(dictString:String)-> 
        [String: Any] {
         do {
            return try  JSONSerialization.jsonObject(with: 
            dictString.data(using: String.Encoding.utf8, 
            allowLossyConversion: true)!, options:  
            JSONSerialization.ReadingOptions.allowFragments) as! 
            Dictionary
         } catch {
            return [:]
         }
    }

【讨论】:

  • 首先您需要将整个 json 放入字典对象中。
  • 为什么是allowLossyConversion? UTF8 是完全无损的。为什么allowFragments?对于预期的集合类型,此选项毫无意义。
【解决方案2】:

您可以使用 Codable 协议进行解析。

创建你的模型

struct APIRootModel : Codable  {
     let head : HeaderModel
     let body : BodyModel
 }

  struct HeaderModel :Codable{
     let StatusValue : Int
     let StatusText : String
  }

 struct BodyModel : Codable{
     let Data : [DataModel]
  }


 struct DataModel : Codable{
     let payer_type_id : Int
     let payer_type : String
 }

使用JSONDecoder()解码你的json

  let decoder = JSONDecoder()

    do {
        let rootModel = try decoder.decode(APIRootModel.self, from: jsonData)
        print(rootModel.body.data)
    } catch {
        print(error)
    }

使用 [DataModel] 作为您的 tableview 数据源。

【讨论】:

  • 请不要在解码捕获块中建议error.localizedDescription。你会得到一个通用的无意义的消息。始终print(error) 以获得真正的综合错误。
  • 它不工作,你能展示完整的实现吗??
  • @Vasucd 我无法将此数据放入 tableview。
猜你喜欢
  • 2021-01-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-14
相关资源
最近更新 更多