Solución:
Puede agregar una propiedad calculada para obtener la representación JSON y una función estática (clase) para crear una matriz JSON a partir de una Sentence
formación.
struct Sentence {
var sentence = ""
var lang = ""
static func jsonArray(array : [Sentence]) -> String
{
return "[" + array.map {$0.jsonRepresentation}.joinWithSeparator(",") + "]"
}
var jsonRepresentation : String {
return "{"sentence":"(sentence)","lang":"(lang)"}"
}
}
let sentences = [Sentence(sentence: "Hello world", lang: "en"), Sentence(sentence: "Hallo Welt", lang: "de")]
let jsonArray = Sentence.jsonArray(sentences)
print(jsonArray) // [{"sentence":"Hello world","lang":"en"},{"sentence":"Hallo Welt","lang":"de"}]
Editar:
Swift 4 presenta el Codable
protocolo que proporciona una forma muy conveniente de codificar y decodificar estructuras personalizadas.
struct Sentence : Codable {
let sentence : String
let lang : String
}
let sentences = [Sentence(sentence: "Hello world", lang: "en"),
Sentence(sentence: "Hallo Welt", lang: "de")]
do {
let jsonData = try JSONEncoder().encode(sentences)
let jsonString = String(data: jsonData, encoding: .utf8)!
print(jsonString) // [{"sentence":"Hello world","lang":"en"},{"sentence":"Hallo Welt","lang":"de"}]
// and decode it back
let decodedSentences = try JSONDecoder().decode([Sentence].self, from: jsonData)
print(decodedSentences)
} catch { print(error) }
Utilice la clase NSJSONSerialization.
Usando esto como referencia, es posible que deba crear una función que devuelva la cadena serializada JSON. En esta función, puede tomar las propiedades requeridas y crear un NSDictionary a partir de ellas y usar la clase mencionada anteriormente.
Algo como esto:
struct Sentence {
var sentence = ""
var lang = ""
func toJSON() -> String? {
let props = ["Sentence": self.sentence, "lang": lang]
do {
let jsonData = try NSJSONSerialization.dataWithJSONObject(props,
options: .PrettyPrinted)
return String(data: jsonData, encoding: NSUTF8StringEncoding)
} catch let error {
print("error converting to json: (error)")
return nil
}
}
}
Debido a que su estructura solo tiene dos propiedades, podría ser más fácil simplemente construir la cadena JSON usted mismo.
Rápido 4 admite el protocolo codificable, por ejemplo
struct Sentence: Encodable {
var sentence: String?
var lang: String?
}
let sentence = Sentence(sentence: "Hello world", lang: "en")
Ahora puede convertir automáticamente su Struct en JSON usando un JSONEncoder:
let jsonEncoder = JSONEncoder()
let jsonData = try jsonEncoder.encode(sentence)
Imprimirlo:
let jsonString = String(data: jsonData, encoding: .utf8)
print(jsonString)
{
"sentence": "Hello world",
"lang": "en"
}
https://developer.apple.com/documentation/foundation/archives_and_serialization/encoding_and_decoding_custom_types