Il fonctionne avec un bon vieux JSONSerialization
et l'option lecture .allowFragments
. De l'documentation:
allowFragments
Indique que l'analyseur doit permettre à des objets de haut niveau qui ne sont pas une instance de NSArray ou NSDictionary.
Exemple:
let json = "22".data(using: .utf8)!
if let value = (try? JSONSerialization.jsonObject(with: json, options: .allowFragments)) as? Int {
print(value) // 22
}
Cependant, JSONDecoder
n'a pas cette option et ne pas accepter de haut niveau objets qui ne sont pas des tableaux ou des dictionnaires. On peut voir dans le source code que la méthode decode()
appelle JSONSerialization.jsonObject()
sans aucune option:
open func decode<T : Decodable>(_ type: T.Type, from data: Data) throws -> T {
let topLevel: Any
do {
topLevel = try JSONSerialization.jsonObject(with: data)
} catch {
throw DecodingError.dataCorrupted(DecodingError.Context(codingPath: [], debugDescription: "The given data was not valid JSON.", underlyingError: error))
}
// ...
return value
}
ce n'est pas un JSON valide, un JSON est faite par des paires de clés et de valeur et il est juste une valeur. –
Ceci est un fragment JSON valide, pas JSON valide. – Sulthan
Je suppose que cela dépend de la norme utilise. Découvrez RFC 7159 ici https://jsonformatter.curiousconcept.com/. aussi source qu'il est valide https://tools.ietf.org/html/rfc7159#section-3 – saph