Как создать быструю Codable структуру, которая будет декодировать и кодировать MongoDB _id ObjectId () в JSON - PullRequest
0 голосов
/ 05 декабря 2018

Я очень новый разработчик (это моя первая работа разработчика), создающая приложение Swift / iOS для создания / обработки заказов, и сервер отправляет мне объект ObjectID () в JSON с каждым продуктом, на который я смотрю.После некоторых исследований кажется, что это объект MongoDB.

Джентльмен, кодирующий мои маршруты API, хочет, чтобы я брал этот объект для каждого продукта, который отправляет мне сервер, чтобы я мог отправить его обратно на сервер с любыми заказами, которые включают этот продукт.Он говорит, что это облегчит ему доступ к продукту при обработке новых заказов.

До сих пор у меня не было проблем с расшифровкой JSON, который сервер отправляет мне, потому что он был в таких форматах, как String., Int, Float и т. Д., Или просто другой объект JSON, которому нужна новая структура Codable, полная большего количества того же самого.

Когда дело доходит до создания структуры Codable для ObjectID, я не знаю, чтоключи / типы значений (свойства / типы значений, любую терминологию, которую вы хотите использовать), чтобы сказать, чего ожидать.Или, если это правильный путь.

Это то, что у меня сейчас есть:

import Foundation

struct ProductData: Codable {
    let _id : ObjectId
    let productId : String
    let description : String
    let ...
}

Тип ObjectId, показанный выше, является пользовательской структурой Codable, которую у меня нет.еще не построен, потому что я не уверен, как.Я полагаю, это должно выглядеть примерно так:

import Foundation

struct ObjectId : Codable {
    let someVariableName : SomeCodableType
    let ...
}

Я не знаю, каким будет имя переменной или тип.Я понимаю, что в нем есть метка времени и некоторая другая информация, и я читал о том, что она представлена ​​в виде строки, но у меня возникает ощущение, что если я попробую что-то вроде let _id:String в моей структуре Codable, она выиграет »Я декодирую / кодирую так, как я себе представляю.

Мне интересно, как создать «тип», который будет правильно ловить / декодировать объект _id, который мне бросают.Если есть способ просто хранить эти данные, не декодируя их, и просто отсылать их обратно, когда мне это понадобится позже, это также будет соответствовать моим целям.

РЕДАКТИРОВАТЬ: После некоторых экспериментов янашел этот необработанный JSON для объекта _id:

"_id":{"$id":"58071f9d3f791f4f4f8b45ff"}

Знаки доллара не допускаются в именах переменных / свойств Swift, поэтому я не уверен, как действовать таким образом, который удовлетворяет как входящим, так и исходящим - IМожно создать пользовательский ключ, вручную инициализировав JSON, чтобы он правильно работал со Swift, но я не уверен, есть ли способ отменить это при кодировании того же объекта обратно в JSON для отправки обратно на сервер.

1 Ответ

0 голосов
/ 11 декабря 2018

Поймать JSON как словарь [String: String], похоже, удалось.

import Foundation

struct ProductData: Codable {
    let _id : [String:String]
    let productId : String
    let description : String
    let ...
}

Однако сервер пытается преобразовать это обратно в объект OrderId () - япредполагая, что перевод с «$ id»: OrderId («someid») на «$ id»: «someid» не то, что должно произойти.

...