我有下一个结构:
struct PatientEntity{
let patientId: String
let firstName: String
let lastName: String
let gender: String
let birthDate: String?
let medicalDiagnosis: String?
let therapyDiagnosis: String?
let therapyGoals: String?
}
当我试图将其序列化为json以便发送到服务器端时,我得到了异常,因为bithdate上有可选的word。我试图在下一个代码中删除可选的单词,但是没有成功:
if let bithDate = self.patientBithDateTextField.text {
newPatient: PatientEntity = PatientEntity(
patientId: self.patientIDTextField.text!,
firstName: self.patientNameTextField.text!,
lastName: self.patientLastNameTextField.text!,
gender: self.getSelectedGender(),
birthDate: bithDate,
medicalDiagnosis: nil,
therapyDiagnosis: nil,
therapyGoals: nil
)
...call API
}
我的序列化代码是:
urlRequest.httpBody = try JSONSerialization.data(withJSONObject: parameters, options: [])
其中参数值为:
case .createPatient(let newPatient):
return ["patient": newPatient]
输出打印如下所示:
POST字符串中的参数是:[“患者”:患者度(patientId:“fff”,名:“rrr”,姓:“rrrr”,性别:“女性”,出生日期:可选(“2018-05-23”),医学诊断:无,治疗诊断:无
为了跳过对象权限的序列化,需要做什么?
例外情况是:
由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“JSON写入(_SwiftValue)中的类型无效”
如果< code>PatientEntity的字段与服务器期望的完全一致,那么只需使其符合Encodable即可:
struct PatientEntity: Encodable {...
并以这种方式序列化:
urlRequest.httpBody = try JSONEncoder().encode(parameters)
您的参数应该是< code>String、< code>NSNumber、< code>Array、< code>Dictionary或< code>NSNull的实例,而不是< code>PatientEntity类型的对象,因此请将< code>PatientEntity转换为< code>dictionary
所以参数应该是这样的
["patient": ["patientId": "fff", "firstName": "rrr", "lastName": "rrrr", "gender": "Female", "birthDate": Optional("2018-05-23"), "medicalDiagnosis": nil, vtherapyDiagnosis": nil, "therapyGoals": nil]]
如果你想检查一个有效的出生日期,可选绑定不是这样做的地方,我得到了和你一样的错误。我建议您分离出从视图中检索输入的代码。然后,测试bDate != nil
是否如下或类似。
struct PatientEntity: Encodable{
let patientId: String
let firstName: String
let birthDate: String?
}
var bDate: String? = "12-12-12"
var pID: String? = "2346"
var fName: String? = "gldlfk"
if bDate != nil {
let newPatient: PatientEntity = PatientEntity(patientId: pID!, firstName: fName!, birthDate: bDate)
let encoder = JSONEncoder()
let data = try! encoder.encode(newPatient)
print(String(data: data, encoding: .utf8)!)
}
输出:
{"firstName":"gldlfk","birthDate":"12-12-12","patientId":"2346"}
我试图将JSON字符串反序列化为Java对象,但遇到以下异常: JsonDeserializer com.google.gson.DefaultTypeAdapters$CollectionTypeAdapter@306A30C7未能对给定类型类java.util.ArrayList的json对象[“93”]进行反序列化 我的主文件: 应该表示JSON的类是: 我尝试了SO上给出的解决方案,但也有
我正在试验Stanford CoreNLP库,我想序列化主要的StanfordCoreNLP管道对象,尽管它抛出了一个java.io.NotSerializableException。 完整故事:每当我运行我的实现时,将管道注释器和分类器加载到内存中大约需要15秒。最终进程的内存约为600MB(很容易小到可以存储在我的机箱中)。我想在第一次创建管道后保存它,这样我就可以在以后将其读入内存。 然而,
问题内容: 我有一个对象(解析树),其中包含子节点,这些子节点是对其他节点的引用。 我想使用序列化此对象,但是我得到了 TypeError:循环对象值 因为我提到的结构。 我该如何解决?对我而言,在序列化对象中是否表示对其他节点的引用并不重要。 另一方面,在创建对象时从对象中删除这些属性似乎很乏味,我也不想对解析器(水仙)进行更改。 问题答案: 使用的第二个参数,该替代品的功能,以排除已序列化对象
问题内容: 我正在尝试反序列化(使用gson)如下所示的JSON对象: 我该如何处理?我什至不知道该怎么称呼- 这里代表了多个“项目”,但这不是一个数组。当我尝试将其反序列化为数组时,程序在“预期的Begin_Array但找到Begin_Object”异常时崩溃。当我尝试将其反序列化为Strong对象时(请参见下面的类),程序将运行,但所有字段均返回null。 这是我尝试将其映射到的类: 完整的J
我有以下用于序列化查询集的代码: 下面是我的 我需要将其序列化。但它说无法序列化
问题内容: 我正在尝试使用Gson反序列化从Web服务返回的json字符串 该结构将以返回。 哪里像 和ItemDTO就像 当我按如下方式调用代码时 对象内部的所有内容均为空 但是,如果我使用 并将它们从org.json罐子中逐段拉出,效果很好,并相应地填充了字段。 关于我在做什么错的任何想法吗?Gson非常快吗?还是我最好坚持自己已经做的工作? 谢谢大卫 问题答案: 原始问题中的示例Java