当前位置: 首页 > 面试题库 >

在Swift中将JSON字符串转换为Object的简单方法

通典
2023-03-14
问题内容

我一直在寻找将Swift中一个相当简单的JSON字符串转换为对象类型但无济于事的日子。

这是Web服务调用的代码:

func GetAllBusiness() {

        Alamofire.request(.GET, "http://MyWebService/").responseString { (request, response, string, error) in

                println(string)

        }
}

我有一个快速的结构Business.swift:

struct Business {
    var Id : Int = 0
    var Name = ""
    var Latitude = ""
    var Longitude = ""
    var Address = ""
}

这是我部署的测试服务:

[
  {
    "Id": 1,
    "Name": "A",
    "Latitude": "-35.243256",
    "Longitude": "149.110701",
    "Address": null
  },
  {
    "Id": 2,
    "Name": "B",
    "Latitude": "-35.240592",
    "Longitude": "149.104843",
    "Address": null
  }
  ...
]

如果有人通过这个指导我会很高兴。

谢谢。


问题答案:

这里有一些技巧,以简单的例子开始。

考虑您具有以下JSON Array String(类似于您的):

 var list:Array<Business> = []

  // left only 2 fields for demo
  struct Business {
    var id : Int = 0
    var name = ""               
 }

 var jsonStringAsArray = "[\n" +
        "{\n" +
        "\"id\":72,\n" +
        "\"name\":\"Batata Cremosa\",\n" +            
        "},\n" +
        "{\n" +
        "\"id\":183,\n" +
        "\"name\":\"Caldeirada de Peixes\",\n" +            
        "},\n" +
        "{\n" +
        "\"id\":76,\n" +
        "\"name\":\"Batata com Cebola e Ervas\",\n" +            
        "},\n" +
        "{\n" +
        "\"id\":56,\n" +
        "\"name\":\"Arroz de forma\",\n" +            
    "}]"


        // convert String to NSData
        var data: NSData = jsonStringAsArray.dataUsingEncoding(NSUTF8StringEncoding)!
        var error: NSError?

        // convert NSData to 'AnyObject'
        let anyObj: AnyObject? = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions(0),
            error: &error)
        println("Error: \(error)")

     // convert 'AnyObject' to Array<Business>
     list = self.parseJson(anyObj!)

     //===============

    func parseJson(anyObj:AnyObject) -> Array<Business>{

        var list:Array<Business> = []

         if  anyObj is Array<AnyObject> {

            var b:Business = Business()

            for json in anyObj as Array<AnyObject>{
             b.name = (json["name"] as AnyObject? as? String) ?? "" // to get rid of null
             b.id  =  (json["id"]  as AnyObject? as? Int) ?? 0

               list.append(b)
            }// for

        } // if

      return list

    }//func

[编辑]

摆脱null更改为:

b.name = (json["name"] as AnyObject? as? String) ?? ""
b.id  =  (json["id"]  as AnyObject? as? Int) ?? 0

另请参阅**[Coalescing Operator](https://developer.apple.com/library/prerelease/mac/documentation/Swift/Conceptual/Swift_Programming_Language/BasicOperators.html#//apple_ref/doc/uid/TP40014097-CH6-XID_124)**
(aka的参考??

希望它能帮助您解决问题,



 类似资料:
  • 我正试图用jackson-core-2.9.6把我的json转换成地图。我的json是 我试图将JSON解析成Map的Java代码是这样的 我得到的异常是com.fasterxml.jackson.databind.exc.MismatchedInputException:无法构造(尽管至少存在一个Creator):没有String参数构造函数/工厂方法可以从[源:(String)“”{\r\n“

  • 如何从字符串生成有效的UUID?字符串本身不是我要找的。相反,我正在寻找类似于将任何字符串转换为有效 UUID 的哈希函数。

  • 我正在尝试如何在Swift中将转换为。 我想出了一个变通方法,使用但是我想知道如何在Swift中完成这一切。

  • 我有一个RestController类,它有一个方法可以根据电影的标题搜索电影: 如果我发送一个json字符串 从邮递员到endpoint,我收到一个空白的回复。 然后我做了一个 就在进入方法后找到字符串filmSearch正是我从邮递员发送的JSON字符串。我的应用程序没有看到JSON和提取值从filmSearch在我的请求附加到应用程序内字符串filmSearch. 如果我移除 在请求映射的一

  • 问题内容: 一开始我没有清楚地解释我的问题。在python中将json转换为字符串时,请尝试使用和。 我的问题是: 我的预期输出: 我的预期输出: 对我来说,不必再次将输出字符串更改为json(dict)。 这该怎么做? 问题答案: 不仅仅是从Python对象中生成一个 字符串 ,它还会在Type Conversion Table 之后始终生成一个 有效的 JSON字符串(假设对象内部的所有内容都

  • 问题内容: 我正在尝试将a转换为a ,然后更改格式。但是当我传递给它时会产生空白。 问题答案: 您可以从Apple Dateformatter文档中 获取详细信息。如果要为dateString设置dateformat,请参阅此链接,您可以在此处获取详细的dateformat ,例如 你得到的输出为