当前位置: 首页 > 知识库问答 >
问题:

在swift中解析JSON和数组中的循环时出错

赫连冠玉
2023-03-14

我尝试了以下get方法:swift JSON登录REST with post和get响应示例

代码:

func makeGetCall() {

    // Set up the URL request

    let todoEndpoint: String = "my link"

    guard let url = URL(string: todoEndpoint) else {

        print("Error: cannot create URL")

        return

    }

    let urlRequest = URLRequest(url: url)



    // set up the session

    let config = URLSessionConfiguration.default

    let session = URLSession(configuration: config)



    // make the request

    let task = session.dataTask(with: urlRequest) {

        (data, response, error) in

        // check for any errors

        guard error == nil else {

            print("error calling GET on /public/api/services")

            print(error!)

            return

        }

        // make sure we got data

        guard let responseData = data else {

            print("Error: did not receive data")

            return

        }

        // parse the result as JSON, since that's what the API provides

        do {

            guard let todo = try JSONSerialization.jsonObject(with: responseData, options: [])

                as? [String: Any] else {

                    print("error trying to convert data to JSON")

                    return

            }

            // now we have the todo

            // let's just print it to prove we can access it

            print("The todo is: " + todo.description)



            // the todo object is a dictionary

            // so we just access the title using the "title" key

            // so check for a title and print it if we have one

            guard let todoTitle = todo["name"] as? String else {

                print("Could not get todo title from JSON")

                return

            }

            print("The title is: " + todoTitle)

        } catch  {

            print("error trying to convert data to JSON")

            return

        }

    }

    task.resume()

}

我得到了一个输出:试图将数据转换为JSON时出错…

[
  {
    "id": 1,
    "name": "Services 1",
    "description": "This is a description of Services 1. This is a description of Services 1 This is a description of Services 1. ",
    "created_at": null,
    "updated_at": null
  },
  {
    "id": 2,
    "name": "Services 2",
    "description": "This is a description of Services 2. This is a description of Services 2 This is a description of Services 2. ",
    "created_at": null,
    "updated_at": null
  }
]

服务2的描述是:这是对服务2的描述。这是对服务2的描述这是对服务2的描述。

共有1个答案

郏稳
2023-03-14

请仔细阅读JSON。根对象显然是一个数组([])

guard let todos = try JSONSerialization.jsonObject(with: responseData) as? [[String: Any]] else {                    
       print("error trying to convert data to JSON")
       return
  }
  for todo in todos {
      print(todo["name"] as? String ?? "n/a")
  }

但是,我建议使用decodable协议。在类外声明此结构

struct Service : Decodable {
    let id : Int
    let name, description : String
    let createdAt : String?
    let updatedAt : String?
}

并以这种方式解码JSON

do {
   let decoder = JSONDecoder()
   decoder.keyDecodingStrategy = .convertFromSnakeCase
   let todos = try decoder.decode([Service].self, from: responseData)
   for todo in todos {
      print(todo.name)
   }

} catch { print(error) }
 类似资料:
  • 问题内容: 我正在使用一个API,该API返回如下所示的JSON 在Swift中,我使用两个函数来获取并解析JSON 然后我用 可以很好地解析JSON。当我打印出 我得到了数组的所有内容。但是,我无法访问每个单独的索引。我很肯定这是一个数组,因为我之间 返回正确的长度。但是,如果我尝试通过使用访问单个索引 XCode关闭语法高亮显示并给我以下信息: 并且代码将无法编译。 这是XCode 6的错误,

  • 问题内容: 我在解析Json文件时遇到问题。尝试解析一个Json文件: 这是我为其定义的两个结构。 暂停结构: AttachedModel模型结构: 然后,我为其创建一个键和一个函数: 在功能上: 这是输出 问题是,即使有数据,该行也始终为假,并且转到“ 有人可以告诉我这里的问题在哪里吗? 问题答案: 为您的json创建此模型类: 然后,您可以像这样解析它:

  • 问题内容: 我正在尝试解析如下的JSON 到[[“ Jack”,“ Jones”,“ Rock”,“ Taylor”,“ Rob”],[“ Rose”,“ John”],[“ Ted”]]的数组 这是数组的数组。 我尝试了下面的代码 当我打印“人”时,我得到o / p为 我很困惑当“人物”重复3次时如何解析 尝试在UITableView中显示内容,其中第一个单元格具有“ Jack” ..“ Rob

  • 问题内容: 我从REST JSON响应中获得以下字符串: 其余响应定义来自Facebook:FB REST链接 我正在使用在Jetty中运行的Google App Engine + GAELYK。 在服务器上的Groovy 中将上述内容转换为 地图* 数组 的最佳方法是什么。(这可能必须通过响应来递归) * 我正在寻找不包含很多库的简单东西。(我没有行家) 问题答案: 编辑:自1.8.0以来的Gr

  • 问题内容: 我有一个,尝试检索并解析它,但出现此错误: 这是我的功能: 怎么了?我花了两天时间来解决这个问题。有时我会遇到空值,但我不知道如何使用它们。 问题答案: 添加与null测试不同的简单方法。 那你还有问题吗?

  • 问题内容: 我最近将REST API升级为使用jersey 2.x,现在我无法以以前的方式检索JSON主体参数,因此不再调用这些方法。我的猜测是我缺少将JSON解析为java对象的依赖项,但是我不太确定我需要添加什么,任何帮助都值得赞赏。 pom.xml REST方式 FollowUserBean.java 问题答案: 您需要一个JSON提供程序 在撰写本文时,Jersey 2.x与以下模块集成以