我收到API的回复如下:
{
"data": {
"items": [
{
"jsonBody": "{n "documentInfo": {n "docId": "AAAAAAAA-AAAA-AAAA-AAAA-AAAAAAAAAAAA",n "docCreateTimestamp": 56565687867,n "docUpdateTimestamp": 56465755766,n "docSynchTimestamp": 56565687867,n "documentType": "document-monthly-instagram",n "documentName": "Monthly Instagram Posts",n "docDescription": "Monthly Instagram Posts"n },n "documentData": {n "header": {n "configuration": {n "autoGenerate": [n {n "id": "headerDocNumberId",n "type": "8code"n },n {n "id": "headerVersionNumberId",n "type": "autonum"n },n {n "id": "headerDocumentCreationDateId",n "type": "date"n }n ],n "autoFill": [],n "tileTitle": "headerDocumentTileNameId",n "tileView": [n "headerDocumentTileNameId",n "headerDetailsId",n "headerDocumentCreationDateId"n ],n "createView": [n "headerMonthNameId",n "headerNameId",n "headerDetailsId"n ],n "editView": [n "headerMonthNameId",n "headerNameId",n "headerDetailsId"n ]n },n "data": [n {n "id": "headerDocNumberId",n "name": "Document Number",n "attr": "",n "placeholder": "Enter An Unique Value",n "value": "",n "type": "text",n "extType": "",n "tag": "",n "readonly": false,n "required": true,n "keyboardType": ""n },n {n "id": "headerVersionNumberId",n "name": "Document Version",n "attr": "",n "placeholder": "Enter A Number",n "value": 1,n "type": "int",n "extType": "",n "tag": "",n "readonly": true,n "required": true,n "keyboardType": ""n },n {n "id": "headerDocumentCreationDateId",n "name": "Time & Date",n "attr": "",n "placeholder": "Enter Date",n "value": "",n "type": "text",n "extType": "",n "tag": "",n "readonly": true,n "required": true,n "keyboardType": ""n },n {n "id": "headerNameId",n "name": "Name",n "attr": "",n "placeholder": "Enter Name",n "value": "",n "type": "text",n "extType": "",n "tag": "",n "readonly": true,n "required": true,n "keyboardType": ""n },n {n "id": "headerDocumentTileNameId",n "name": "Document Type",n "attr": "",n "placeholder": "",n "value": "Monthly Log Book",n "type": "text",n "extType": "",n "readonly": true,n "requred": true,n "keyboardType": ""n },n {n "id": "headerMonthNameId",n "name": "Month",n "attr": "",n "placeholder": "Enter Post Month",n "value": "",n "type": "list",n "extType": "monthTypeListId",n "readonly": false,n "requred": false,n "keyboardType": ""n },n {n "id": "headerDetailsId",n "name": "Details",n "attr": "",n "placeholder": "Enter Details",n "value": "",n "type": "text",n "extType": "",n "readonly": false,n "requred": false,n "keyboardType": ""n }n ]n },n "content": {n "groups": [n {n "name": "Week 1",n "sectionType": {n "extendable": "dynamic",n "allowedTypeIds": [n "typePostId"n ]n },n "sections": [n ]n },n {n "name": "Week 2",n "sectionType": {n "extendable": "dynamic",n "allowedTypeIds": [n "typePostId"n ]n },n "sections": [n ]n },n {n "name": "Week 3",n "sectionType": {n "extendable": "dynamic",n "allowedTypeIds": [n "typePostId"n ]n },n "sections": [n ]n },n {n "name": "Week 4",n "sectionType": {n "extendable": "dynamic",n "allowedTypeIds": [n "typePostId"n ]n },n "sections": [n ]n }n ]n },n "summary": ""n },n "documentStructure": {n "sectionTypes": [n {n "id": "typePostId",n "name": "INSTAGRAM POST",n "order": 0,n "rowType": {n "extendable": "static",n "allowedTypeIds": [n "rowDateId",n "rowNameOfEventId",n "rowDescriptionId",n "rowHashTagsId",n "rowLocationId",n "rowPeopleLinksId",n "rowLogosId",n "rowPicturesVideoId",n "rowPromoteId",n "rowDestinationId",n "rowAudienceId",n "rowBudgetId"n ]n },n "rows": [n ],n "collapsed": falsen }n ],n "rowTypes": [n {n "id": "rowDateId",n "name": "Date",n "attr": "Select date",n "placeholder": "Enter Trip Date",n "value": "",n "type": "date",n "extType": "",n "readonly": false,n "requred": false,n "keyboardType": "",n "col": 2n },n {n "id": "rowNameOfEventId",n "name": "Name of Event",n "attr": "Enter name of event",n "placeholder": "Enter name of event",n "value": "",n "type": "textArea",n "extType": "512",n "readonly": false,n "requred": false,n "keyboardType": "",n "col": 3n },n {n "id": "rowDescriptionId",n "name": "Decription of Event",n "attr": "Enter description of event",n "placeholder": "Enter description",n "value": "",n "type": "textArea",n "extType": "512",n "readonly": false,n "requred": false,n "keyboardType": "",n "col": 4n },n {n "id": "rowHashTagsId",n "name": "Hash Tags",n "attr": "Enter hash tags",n "placeholder": "Enter hash tags",n "value": "",n "type": "textArea",n "extType": "512",n "readonly": false,n "requred": false,n "keyboardType": "",n "col": 5n },n {n "id": "rowLocationId",n "name": "Location",n "attr": "Select location",n "placeholder": "Enter location",n "value": {n "description": "",n "location": {}n },n "type": "address",n "extType": "300",n "readonly": false,n "requred": false,n "keyboardType": "",n "col": 6n },n {n "id": "rowPeopleLinksId",n "name": "People links",n "attr": "Enter people links",n "placeholder": "Enter people links",n "value": "",n "type": "textArea",n "extType": "512",n "readonly": false,n "requred": false,n "keyboardType": "",n "col": 7n },n {n "id": "rowLogosId",n "name": "Logos",n "attr": "Logos",n "placeholder": "",n "value": [],n "type": "photo",n "extType": "3",n "readonly": false,n "requred": false,n "keyboardType": "",n "col": 8n },n {n "id": "rowPicturesVideoId",n "name": "Pictures/Video Records",n "attr": "Pictures/Video",n "placeholder": "",n "value": [],n "type": "video",n "extType": "5",n "readonly": false,n "requred": false,n "keyboardType": "",n "col": 9n },n {n "id": "rowPromoteId",n "name": "Promote",n "attr": "",n "placeholder": "",n "value": false,n "type": "bool",n "extType": "",n "readonly": false,n "requred": false,n "keyboardType": "",n "col": 10n },n {n "id": "rowDestinationId",n "name": "Destination",n "attr": "Please select destination",n "placeholder": "Select destination",n "value": "iDestinationProfileId",n "type": "list",n "extType": "DestinationTypeListId",n "readonly": false,n "requred": false,n "keyboardType": "",n "col": 11n },n {n "id": "rowAudienceId",n "name": "Audience",n "attr": "Please select audience to promote",n "placeholder": "Select audience",n "value": "iAudienceAutomaticId",n "type": "list",n "extType": "AudienceTypeListId",n "readonly": false,n "requred": false,n "keyboardType": "",n "col": 12n },n {n "id": "rowBudgetId",n "name": "Budget&Duration",n "attr": "Please choose Budget or Duration",n "placeholder": "Select Budget or Duration",n "value": "iBudgetBudgetId",n "type": "list",n "extType": "BudgetTypeListId",n "readonly": false,n "requred": false,n "keyboardType": "",n "col": 13n }n ],n "listTypes": [n {n "id": "DestinationTypeListId",n "items": [n {n "id": "iDestinationProfileId",n "value": "Your Profile",n "selected": truen },n {n "id": "iDestinationWebsiteId",n "value": "Your Website",n "selected": falsen },n {n "id": "iDestinationDirectId",n "value": "Your Direct Messages",n "selected": falsen }n ]n },n {n "id": "AudienceTypeListId",n "items": [n {n "id": "iAudienceAutomaticId",n "value": "Automatic",n "selected": truen },n {n "id": "iAudienceKUId",n "value": "Kite Union Clients",n "selected": falsen },n {n "id": "iAudienceCreateId",n "value": "Create Your Own",n "selected": falsen }n ]n },n {n "id": "BudgetTypeListId",n "items": [n {n "id": "iBudgetBudgetId",n "value": "Budget",n "selected": truen },n {n "id": "iBudgetDurationId",n "value": "Duration",n "selected": falsen }n ]n },n {n "id": "monthTypeListId",n "items": [n {n "id": "iMonthTypeJanuaryId",n "value": "January",n "selected": falsen },n {n "id": "iMonthTypeFebruaryId",n "value": "February",n "selected": falsen },n {n "id": "iMonthTypeMarchId",n "value": "March",n "selected": falsen },n {n "id": "iMonthTypeAprilId",n "value": "April",n "selected": falsen },n {n "id": "iMonthTypeMayId",n "value": "May",n "selected": falsen },n {n "id": "iMonthTypeJuneId",n "value": "June",n "selected": falsen },n {n "id": "iMonthTypeJulyId",n "value": "July",n "selected": falsen },n {n "id": "iMonthTypeAugustId",n "value": "August",n "selected": falsen },n {n "id": "iMonthTypeSeptemberId",n "value": "September",n "selected": falsen },n {n "id": "iMonthTypeOctoberId",n "value": "October",n "selected": falsen },n {n "id": "iMonthTypeNovemberId",n "value": "November",n "selected": falsen },n {n "id": "iMonthTypeDecemberId",n "value": "December",n "selected": falsen }n ]n }n ]n }n}"
}
]
},
"code": 0,
"message": ""
}
我想将";jsonBody"将其串入可编码模型中。
我曾试图将其转换为[String:Array],但当我将模型分配给结果时,它会给我一个错误:
typeMismatch(Swift.Dictionary<Swift.String,Any>,Swift.DecodingError.Context(codingPath:[CodingKeys(stringValue:"jsonBody",intValue:nil(],debugDescription:"应解码Dictionary<字符串,任意>但是找到了字符串/数据&";,underlyingError:nil((
没有什么真正复杂的,项目必须使用辅助JsonDecoder
:
struct Item: Decodable {
let body: Body
init(from decoder: Decoder) throws {
let container = try decoder.container(keyedBy: CodingKeys.self)
let jsonBody = try container.decode(String.self, forKey: .jsonBody)
let jsonBodyData = jsonBody.data(using: .utf8)!
let decoder = JSONDecoder()
body = try decoder.decode(Body.self, from: jsonBodyData)
}
private enum CodingKeys: String, CodingKey {
case jsonBody
}
}
struct Body: Decodable {
let documentInfo: ...
}
这是一场艰难的比赛。希望这能帮助其他人。我正在解析JSON文件中的数据。以下是解析JSON:的代码
guard let url = Bundle.main.url(forResource: "SYNC_DATA", withExtension: "json") else {
fatalError("Failed to locate SYNC_DATA in bundle")
}
if let data = try? Data(contentsOf: url) {
let decoder = JSONDecoder()
if let syncData = try? decoder.decode(SyncResponse.self, from: data) {
print("Successfully decoded sync data!!!")
print("Sync Data = (syncData)")
}
} else {
fatalError("Failed to load SYNC_DATA from bundle")
}
这是编码表:
struct SyncResponse: Codable {
//MARK: items currently in the sync download
var serverTimestamp: String
var status: Bool
//MARK: init method used to decode the data for this object
init(from decoder: Decoder) throws {
let container = try decoder.container(keyedBy: CodingKeys.self)
self.serverTimestamp = try container.decode(String.self, forKey: .serverTimestamp)
self.status = try container.decode(Bool.self, forKey: .status)
....(other data to decode)
}
enum CodingKeys: String, CodingKey {
case serverTimestamp = "serverTimestamp"
case status = "status"
....(other data)
}
}