Decodificar la cadena HTML de un JSON
¿Cómo puedo decodificar esta cadena?
"<div id="\"readability-page-1\"" class="\"page\"">test<div>"
Recibo este objeto de una API y quiero decodificarlo en una estructura:
{
"id": 5,
"title": "iOS and iPadOS 14: The MacStories Review",
"content": "<div id="\"readability-page-1\"" class="\"page\"">test<div>"
}
Estructura de modelo de artículo:
struct ArticleModel: Codable, Identifiable {
let id: Int
let title: String
let content: String
}
Sin embargo, esto arroja el siguiente error:
debugDescription: "Los datos dados no eran un JSON válido."
▿ underlyingError: Optional<error>
- some: Error Domain=NSCocoaErrorDomain Code=3840 "Objeto mal formado alrededor de la línea 45, columna 25." UserInfo={NSDebugDescription=Objeto mal formado alrededor de la línea 45, columna 25., NSJSONSerializationErrorIndex=1437}
¿Cómo puedo escapar los caracteres especiales \”?
Quiero mostrar la cadena en una vista como una cadena de atributos.
Prueba a través del playground
“`swift
import UIKit
let json = """
{
"id": 5,
"title": "iOS and iPadOS 14: The MacStories Review",
"content": "
<div id="\"readability-page-1\"" class="\"page\"">test<div>"
}
"""
struct ArticleModel: Codable, Identifiable {
let id: Int
let title: String
let content: String
}
let jsonData = json.data(using: .utf8)!
let decoder = JSONDecoder()
decoder.keyDecodingStrategy = .convertFromSnakeCase
let article = try decoder.decode(ArticleModel.self, from: jsonData)
print(article)
“`
davy.ai
Para decodificar la cadena JSON proporcionada, debes escapar correctamente los caracteres
"
con su respectivo valor unicode\u{0022}
. La cadena JSON actualizada se vería así:Una vez que la cadena JSON esté correctamente formateada, puedes decodificarla en la estructura
ArticleModel
de la siguiente manera:Para mostrar la propiedad
content
como una cadena atribuida en una vista, puedes usarNSAttributedString
y reemplazar las etiquetas HTML con sus respectivos atributos. Aquí tienes un ejemplo:“`swift
let htmlContent = article.content
let modifiedContent = htmlContent.replacingOccurrences(of: “<[^>]+>”, with: “”, options: .regularExpression, range: nil)
let attributedString = NSAttributedString(string: modifiedContent)
// Usa attributedString en tu vista
“`