Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/102.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何在没有可选值的情况下将字典数组转换为swift中的json字符串_Ios_Arrays_Json_Xcode_Swift4 - Fatal编程技术网

Ios 如何在没有可选值的情况下将字典数组转换为swift中的json字符串

Ios 如何在没有可选值的情况下将字典数组转换为swift中的json字符串,ios,arrays,json,xcode,swift4,Ios,Arrays,Json,Xcode,Swift4,我想将字典数组转换为json字符串,因此我使用了 func json(from object: NSMutableArray) -> String? { guard let data = try? JSONSerialization.data(withJSONObject: object) else { return nil } return String(data: data, encoding: String.Encoding.utf8) }

我想将字典数组转换为json字符串,因此我使用了

func json(from object: NSMutableArray) -> String? {
    guard let data = try? JSONSerialization.data(withJSONObject: object) else {
        return nil
    }

    return String(data: data, encoding: String.Encoding.utf8)
}
它返回一个json字符串,但在stirng之前有一个可选的

finalString = json(from: saveArray)
print(finalString)
“DayName\”,“DayName\”:“We。“Wed\”,,“就业人员ID\”,“就业人员ID\”:“1\”,,“任命类型:”:“3\”,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,“Da名名名名名名名名名名姓名姓名姓名姓名姓名姓名姓名::::,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,"“2018年3月29日周四,2018年3月29日周四,2018年3月29日。”,“DayName\”,“DayName\”,“DayName\”,“DayName\”::“Thu\”,,“DayName\”,“DayName\”,“DayName\”,“DayName\”,“Day\”,“雇主身份ID ID ID\”::::::“1.1-“1\”,,,,“就业就业身份身份身份ID\”:::::::::“1-“1.1-“1-”,,,,,,,“就业身份身份身份身份身份身份ID ID ID\”::::::::::::::::::“1.1.1.1.1.1.1.1-,,,,,,,,“就业身份身份身份身份身份身份身份身份身份ID ID ID ID ID\,,,,,,“就业ID DayName\“:\”“Fri\”、“EmployeeID\”:“1\”、“任命类型”:“3\”、“FromTime\”:“09:00:00\”、“任命日期”:“2018年5月18日星期五”、“ToTime\”:“10:00:00\”、“CreatedBy\”:“40289\”、“PatientID\”:“17586\”、“ResourceID\”:“1\”、“PatientidD\”:“17590\”)

当我打开这个值时

finalString = json(from: saveArray)
print(finalString!)
然后我得到

[
{
"CreatedOn": "Thursday, Mar 29, 2018",
"DayName": "Wed",
"EmployeeID": "1",
"AppointmentType": "3",
"FromTime": "09:00:00",
"AppointmentDate": "Wednesday, May 16, 2018",
"ToTime": "10:00:00",
"CreatedBy": "40289",
"PatientID": "17586",
"ResourceID": "1",
"PatientConditionId": "17590"
},
{
"CreatedOn": "Thursday, Mar 29, 2018",
"DayName": "Thu",
"EmployeeID": "1",
"AppointmentType": "3",
"FromTime": "09:00:00",
"AppointmentDate": "Thursday, May 17, 2018",
"ToTime": "10:00:00",
"CreatedBy": "40289",
"PatientID": "17586",
"ResourceID": "1",
"PatientConditionId": "17590"
},
{
"CreatedOn": "Thursday, Mar 29, 2018",
"DayName": "Fri",
"EmployeeID": "1",
"AppointmentType": "3",
"FromTime": "09:00:00",
"AppointmentDate": "Friday, May 18, 2018",
"ToTime": "10:00:00",
"CreatedBy": "40289",
"PatientID": "17586",
"ResourceID": "1",
"PatientConditionId": "17590"
}
]
只是一个数组结构


现在我如何在没有可选值的情况下实现json字符串结构?

您可以通过条件绑定来实现

if let finalString = json(from: saveArray) {
  print(finalString) //here final string is unwrapped
} else {
  print("Invalid JSON")
}


您将返回值声明为可选

... -> String?
所以它总是可选的,即使结果不是

展开或可选绑定可选的

finalString! 

if let final = finalString { ...
要清除打印输出中的
可选


更好的解决方案是将函数标记为
可以抛出
,并移交
JSONSerialization
的错误。这是一个比返回可选错误更一致的错误处理。如果没有错误,则从
数据
对象创建的字符串永远不能为
nil

并且不要在Swift中使用
NSMutableArray

func json(from object: [[String:Any]]) throws -> String {
    let data = try JSONSerialization.data(withJSONObject: object)
    return String(data: data, encoding: .utf8)!
}
并使用它

do {
   let finalString = json(from: ...
} catch { print(error) }

放!在字符串的末尾(data:data,encoding:String.encoding.utf8)no返回数组结构。。。但是我想要这个字符串结构。。。。“[{CreatedOn\”:“2018年3月29日星期四”、“DayName\”:“Wed\”、“EmployeeID\”:“1\”、“任命类型”:“3\”、“FromTime\”:“09:00:00\”、“任命日期”:“2018年5月16日星期三”、“ToTime\”:“10:00:00\”、“CreatedBy\”:“40289\”、“PatientID\”、“PatientID\”、“ResourceID:“PatientID\”、“PatientID\”:“17586\”、“PatientID\”、“PatientID\”:“17590\”这里的问题似乎是误解了Swift中的可选值。我建议您阅读苹果免费的Swift书籍(还有很多其他资源),了解哪些是可选的以及如何使用它们。这将允许您回答您的问题:从各方面来看,我知道swift中的可选值是什么。我的问题是,当我打开字符串时,结构为什么会发生变化?你想说“[{“CreatedOn”:“2018年3月29日星期四”,“DayName”:“Wed”,“EmployeeID”:“1”,“AppointType”:“3”,“FromTime”:“09:00:00”,“AppointmentDate”:“2018年5月16日星期三”,“ToTime”:“10:00:00”,“CreatedBy”:“40289”,“PatientID”:“17586”,“ResourceID”:“1”,“PatientConditionId”:“1”,“PatientConditionId”“:“17590”}]“这是swift中的json字符串结构?不,我想要可选字符串中唯一的字符串值,如”[{“CreatedOn\”:“2018年3月29日星期四”、“DayName\”:“Wed\”、“EmployeeID\”:“1\”、“AppointmentType\”、“FromTime\”:“09:00:00\”、“AppointmentDate\”:“2018年5月16日星期三”、“ToTime\:“10:00:00\”、“CreatedBy\”\“40289\”、“PatientID\”:“17586\”、“ResourceID\”:“1\”、“PatientConditionId\”:“17590\”}]“使用此代码,只需检查控制台,您将只获得字符串值,而没有“可选”。我获得了字符串值,但没有反斜杠。它打印在控制台上,这就是为什么它有“\”否则不会。我之前做过,现在我仔细检查了它,但它返回的值与可选关键字相同。当然,您必须输入
json(来自
do-catch
块中的
调用。不要忽略
try?
中的错误,实际上为什么要从可选字符串中删除转义字符?反斜杠是虚拟的而不是真实的。它们只需要能够将整个字符串显示为文本字符串。我们正在使用.net API,后端人员说我想要带反斜杠的结构。否则他们无法解析它。现在我能做什么?
do {
   let finalString = json(from: ...
} catch { print(error) }