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

在Swift中读取json[关闭]

饶德本
2023-03-14

我需要帮助在ios Swift中阅读json。我知道我可以使用decodable,但这是我的JSON的一个示例。当我尝试xith decodable时,我总是得到一个零变量。

谢谢你的帮助

[
     {
       "name": "Bob",
       "age": "16",
       "employed": "No"
     },
     {
       "name": "Vinny",
       "age": "56",
       "employed": "Yes"
     }
]

这是我的密码,用可解码的

struct personResult: Decodable{
    var person: [Person]
}

struct Person:Decodable{
    var name: String
    var age: String
    var employed: String
}

这就是我的职责

    
    func getJson() {
      let url = URL(string: myUrl)!

      let task = URLSession.shared.dataTask(with: url, completionHandler: { (data, response, error) in
        if let error = error {
          print("Error : \(error)")
          return
        }
        
        guard let httpResponse = response as? HTTPURLResponse,
              (200...299).contains(httpResponse.statusCode) else {
          print("Error with the response, unexpected status code: \(response)")
          return
        }
        
        if let data = data {
            
            print(data)
            do {
                let result = try JSONDecoder().decode(personResult.self, from: data)
                print(result)

                
            }catch _ {
                print("errror during json decoder")
            }
            
        }
      })
      task.resume()
    }
    
    
    
}

我总是在我的catch中输入,并打印错误消息

共有1个答案

汪凌
2023-03-14

您的JSON是一个数组而不是字典,只是您的Person结构

struct Person:Decodable{
var name: String
var age: String
var employed: String
}

则在函数中:

func getJson() {
  let url = URL(string: myUrl)!

  let task = URLSession.shared.dataTask(with: url, completionHandler: { (data, response, error) in
    if let error = error {
      print("Error : \(error)")
      return
    }
    
    guard let httpResponse = response as? HTTPURLResponse,
          (200...299).contains(httpResponse.statusCode) else {
      print("Error with the response, unexpected status code: \(response)")
      return
    }
    
    if let data = data {
        
        print(data)
        do {
            let result = try JSONDecoder().decode([Person].self, from: data)
            print(result)

            
        }catch let error {
            print(error)
        }
        
    }
  })
  task.resume()
}
}
 类似资料:
  • 问题内容: 我真的很努力地尝试将JSON文件读入Swift,以便可以使用它。我花了两天的大部分时间来重新搜索并尝试不同的方法,但到目前为止还没有运气,因此我已经注册了StackOverFlow,以查看是否有人可以向我指出正确的方向..... 我的JSON文件称为test.json,其中包含以下内容: 该文件直接存储在文档中,我使用以下代码进行访问: 如果有人可以在正确的方向上向我推销我如何反序列化

  • 问题内容: 我有一个名为 points.json 的JSON文件,以及一个类似于以下内容的读取函数: 它行不通,有什么帮助吗? 问题答案: 您的问题是,您强制拆开值,并且在发生错误的情况下无法知道其来源。 相反,您应该处理错误并安全地打开可选组件。 正如@vadian在他的评论中正确指出的那样,您应该使用。 在Swift中进行编码时,通常是一种代码味道。当然也有例外(IBOutlets和其他),但

  • 问题内容: 我有以下json文件。我想知道我应该将json文件放在我的项目中的位置以及如何读取和存储它。 问题答案: 将该文件放入资产中 。 对于在Android Studio项目中创建的项目,您需要在主文件夹下创建资产文件夹。 将该文件读取为: 然后您可以简单地通过此函数读取此返回 有关JSON的更多详细信息,请参见 http://www.vogella.com/articles/Android

  • 问题内容: 我正在尝试读取JSON数组。这是我的代码。 我的示例JSON文件语法如下所示, 前面有一个大括号。当我尝试执行此代码块时,出现错误提示 JSONArray文本必须在....的字符1处以’[‘开头。 有没有人遇到过这样的问题?任何帮助将不胜感激。如果可以的话,请告诉我一个示例代码块。提前致谢。 问题答案: JSON对象以a开头,以a 结尾,而JSON数组以a开头,以a 结尾。 根据您的情

  • 那么,有没有其他方法来获得特定的键:值?

  • 问题内容: 我正在使用jQuery将json对象发布到我的php应用程序中。 从firebug中提取的json字符串如下所示 在php中,我试图将其转换为关联数组。 到目前为止,我的PHP代码是 对ajax调用的响应应为“ about_us.php”,但返回空白。 问题答案: 您可以避免使用和: 和: 更新: …但是如果您真的想使用它们,则: 和: