簡體   English   中英

在字符串中構建JSON響應

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM