Swift - JSON序列化无效 JSON

Swift - JSONSerialization invalid JSON

我正在通过 HealthKit 访问健康记录,问题是当我检查 FHIR 数据时,使用 [=16= 检查时 JSON 数据无效].我不太熟悉JSONSerialization,这是我第一次真正使用它。

let jsonObject = try JSONSerialization.jsonObject(with: fhirRecord.data, options: [])
print(jsonObject)
{
    lotNumber = 11111;
    occurrenceDateTime = "2021-01-01”;
    patient =     {
        reference = "resource:0";
    };
    performer =     (
                {
            actor =             {
                display = “Some place here“;
            };
        }
    );
    resourceType = Immunization;
    status = completed;
    vaccineCode =     {
        coding =         (
                        {
                code = 1;
                system = “URL_HERE”;
            },
                        {
                code = 28581000087106;
                system = “URL_HERE”;
            }
        );
    };
}

JSON序列化与Codable无关,在Swift中一般应避免。它仅在 Swift 中,因为它是从 ObjC 桥接而来的,即使在 ObjC 中也有很大的局限性。

isValidJSONObject 并没有告诉你 JSON 数据是有效的。它告诉您可以通过 JSON 序列化将 ObjC 对象转换为 JSON(同样,与 Codable 完全无关)。

摆脱JSON序列化。将您的 JSON 插入 https://app.quicktype.io 以为其生成 Codable 模型,并使用 JSONDecoder 对其进行解码。 JSON序列化只会给出 [String: Any],这在 Swift 中很难使用(在 ObjC 中也不是很好)。 JSON解码器会给你一个正确的结构。

正如@RobNapier 指出的那样,我需要 FHIRModels 来自 Apple。与手动使用混乱的 Codable 数据方法相比,我能够更轻松地获取数据。

import ModelsR4

let resource = try decoder.decode(Immunization.self, from: data)

打印输出正常

28581000087106
28581000087106