[英]Builiding JSON Response in String
我正在嘗試構建JSON響應以演示應用程序。 我已經能夠在Java for Android上構建,但是在將其轉換為Swift時遇到麻煩,這是Java版本:
JSONObject response = new JSONObject("{'status': true, 'message':'success', 'data':[" +
"{'id':'ITM10001', 'area':'Regional', 'aboveRegion':'West', 'aboveScore':'7/10', 'belowRegion':'Lagos', 'belowScore':'4/10'}," +
"{'id':'ITM10002', 'area':'Area', 'aboveRegion':'V/Island', 'aboveScore':'8/10', 'belowRegion':'Ogba', 'belowScore':'3/10'}, " +
"{'id':'ITM10003', 'area':'Owned Restaurants', 'aboveRegion':'Yaba', 'aboveScore':'9/10', 'belowRegion':'Sabo', 'belowScore':'2/10'}, " +
"{'id':'ITM10004', 'area':'Franchised Restaurants', 'aboveRegion':'Idumota', 'aboveScore':'9/10', 'belowRegion':'Itafaji', 'belowScore':'3/10'}, " +
"{'id':'ITM10005', 'area':'Owned Restaurants', 'aboveRegion':'Mushin', 'aboveScore':'10/10', 'belowRegion':'Layi', 'belowScore':'2/10'}] }");
這就是我使用在JSONURL上在線看到的代碼迅速完成的工作,但仍然打印出錯誤。 任何幫助,將不勝感激
let json = JSON.parse("{\"status\": true, \"message':\"success\", \"data\":[" +
"{\"status\": \"Approved\", \"paidDate\": \"Paid on 15 Aug 2015\", \"statusDate\": \"30 June 2015\", \"statusPrice\": \"5000\"}," +
"{\"status\": \"Rejected\", \"paidDate\": \"Paid on 15 Jun 2015\", \"statusDate\": \"30 May 2015\", \"statusPrice\": \"7000\"}," +
"{\"status\": \"Approved\", \"paidDate\": \"Paid on 15 July 2015\", \"statusDate\": \"30 June 2015\", \"statusPrice\": \"9000\"}," +
"{\"status\": \"Rejected\", \"paidDate\": \"Paid on 15 May 2015\", \"statusDate\": \"30 April 2015\", \"statusPrice\": \"8000\"} ]}")
為此,您不需要第三方庫,可以使用NSJSONSerialization
。
另外,請注意,所有引號都是雙引號,並且會被轉義(示例中某處有一個單引號,應該將雙引號括起來)。
let str = "{\"status\": true, \"message\":\"success\", \"data\":[" + "{\"status\": \"Approved\", \"paidDate\": \"Paid on 15 Aug 2015\", \"statusDate\": \"30 June 2015\", \"statusPrice\": \"5000\"}," + "{\"status\": \"Rejected\", \"paidDate\": \"Paid on 15 Jun 2015\", \"statusDate\": \"30 May 2015\", \"statusPrice\": \"7000\"}," + "{\"status\": \"Approved\", \"paidDate\": \"Paid on 15 July 2015\", \"statusDate\": \"30 June 2015\", \"statusPrice\": \"9000\"}," + "{\"status\": \"Rejected\", \"paidDate\": \"Paid on 15 May 2015\", \"statusDate\": \"30 April 2015\", \"statusPrice\": \"8000\"}]}"
if let data = str.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false),
let jsonDict = NSJSONSerialization.JSONObjectWithData(data, options: nil, error: nil) as? [String:AnyObject] {
println(jsonDict)
}
結果:
[狀態:1,數據:( {{paidDate =“ Pay on 15 Aug 2015”; status = Approved; statusDate =“ 2015年6月30日”; statusPrice = 5000;},{paidDate =“ Paid on 15 Jun 2015”; status =已拒絕; statusDate =“ 2015年5月30日”; statusPrice = 7000;},{paidDate =“ 2015年7月15日支付”; status =批准; statusDate =“ 2015年6月30日”; statusPrice = 9000;},{paidDate =“支付在2015年5月15日”;狀態=已拒絕;狀態日期=“ 2015年4月30日”;狀態價格= 8000;},消息:成功]
更新:
如果無法轉換特定字符串,請檢查錯誤:
var error:NSError?
if let data = str.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false),
let json = NSJSONSerialization.JSONObjectWithData(data, options: nil, error: &error) as? [String:AnyObject] {
if error == nil {
println(json)
} else {
println(error)
}
}
Swift 2.0更新
do {
if let data = str.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false),
let json = try NSJSONSerialization.JSONObjectWithData(data, options: []) as? [String:AnyObject] {
print(json)
}
} catch let error as NSError {
print(error)
}
從蘋果官方文檔中:
您可以使用NSJSONSerialization類將JSON轉換為Foundation對象,並將Foundation對象轉換為JSON。 可能轉換為JSON的對象必須具有以下屬性:
頂級對象是NSArray或NSDictionary。
所有對象都是NSString,NSNumber,NSArray,NSDictionary或NSNull的實例。
所有字典鍵都是NSString的實例。
數字不是NaN或無窮大。
這意味着,您可以像這樣從Dictionary創建JSON對象 :
let dict = ["fruit": "orange", "chesse": "brie", "cars": ["bmw", "mercedes", "fiat"]]
if let data = NSJSONSerialization.dataWithJSONObject(dict, options: nil, error: nil)
{
let stringFromData = NSString(data: data, encoding: NSStringEncoding.allZeros)
println(stringFromData!)
// prints: "{"fruit":"orange","chesse":"brie","cars":["bmw","mercedes","fiat"]}"
}
您永遠都不應將JSON響應構建為字符串。 保證早晚打破。
您應該根據需要將JSON響應構建為字典或數組,然后使用NSJSONSerialization轉換為NSData。 除了用於調試目的,永遠不會出現字符串。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.