草庐IT

json - 无法将我的 JSON 附加到数组

coder 2023-09-13 原文

我正在尝试将我具有结构的 JSON 附加到数组,但它给了我错误:

Cannot convert value of type '[String:Any]' to expected argument type 'WeerItem'

其中WeerItem是这个:

import Foundation
struct WeerItem : CustomStringConvertible {
    var description: String

    let city : City?
    let cod : Int?
    let message : Double?
    let cnt : Int?
    let list : [List]?

    init(dictionary: [String: Any]) {
        self.city = dictionary["city"] as? City ?? nil
        self.cod = dictionary["cod"] as? Int ?? 0
        self.message = dictionary["message"] as? Double ?? 0.0
        self.cnt = dictionary["cnt"] as? Int ?? 0
        self.list = dictionary["list"] as? [List] ?? nil
    }

}

这就是我调用 JSON 并将其添加到列表的方式

var weerItems : [WeerItem] = []
let task = session.dataTask(with: request as URLRequest,
      completionHandler: { data, response, error -> Void in
           do {
               if let json = try JSONSerialization.jsonObject(with: data!) as? [[String: Any]] {
                  for weerData in json {
                    self.weerItems.append(weerData) //This line gives the error
                  }                         
              }
      } catch { print(error) }
})
task.resume()

示例 JSON:

{  
   "city":{  
      "id":3080866,
      "name":"Zakopane",
      "coord":{  
         "lon":19.9507,
         "lat":49.2969
      },
      "country":"PL",
      "population":27580
   },
   "cod":"200",
   "message":43.5092521,
   "cnt":6,
   "list":[  
      {  
         "dt":1513764000,
         "temp":{  
            "day":-4,
            "min":-9.63,
            "max":-4,
            "night":-9.63,
            "eve":-7.41,
            "morn":-4
         },
         "pressure":924.37,
         "humidity":78,
         "weather":[  
            {  
               "id":600,
               "main":"Snow",
               "description":"light snow",
               "icon":"13d"
            }
         ],
         "speed":0.91,
         "deg":339,
         "clouds":36,
         "snow":0.63
      },
      {  
         "dt":1513850400,
         "temp":{  
            "day":-11.69,
            "min":-15.84,
            "max":-6.47,
            "night":-6.47,
            "eve":-6.71,
            "morn":-14.78
         },
         "pressure":923.24,
         "humidity":83,
         "weather":[  
            {  
               "id":601,
               "main":"Snow",
               "description":"snow",
               "icon":"13d"
            }
         ],
         "speed":1.01,
         "deg":190,
         "clouds":76,
         "snow":2.73
      },
      {  
         "dt":1513936800,
         "temp":{  
            "day":-3.4,
            "min":-8.82,
            "max":-2.63,
            "night":-3.69,
            "eve":-6.33,
            "morn":-3.8
         },
         "pressure":923.89,
         "humidity":93,
         "weather":[  
            {  
               "id":601,
               "main":"Snow",
               "description":"snow",
               "icon":"13d"
            }
         ],
         "speed":1.17,
         "deg":309,
         "clouds":48,
         "snow":1.54
      },
      {  
         "dt":1514023200,
         "temp":{  
            "day":-3.33,
            "min":-5.25,
            "max":-2.68,
            "night":-2.68,
            "eve":-5.01,
            "morn":-2.94
         },
         "pressure":920.7,
         "humidity":89,
         "weather":[  
            {  
               "id":601,
               "main":"Snow",
               "description":"snow",
               "icon":"13d"
            }
         ],
         "speed":2.93,
         "deg":341,
         "clouds":76,
         "snow":5.34
      },
      {  
         "dt":1514109600,
         "temp":{  
            "day":2.53,
            "min":2.04,
            "max":4.52,
            "night":4.52,
            "eve":3.25,
            "morn":2.04
         },
         "pressure":947.42,
         "humidity":0,
         "weather":[  
            {  
               "id":600,
               "main":"Snow",
               "description":"light snow",
               "icon":"13d"
            }
         ],
         "speed":5.23,
         "deg":305,
         "clouds":68,
         "rain":3.79,
         "snow":0.98
      },
      {  
         "dt":1514196000,
         "temp":{  
            "day":3.68,
            "min":-3.88,
            "max":3.71,
            "night":-3.88,
            "eve":0.81,
            "morn":3.71
         },
         "pressure":951.34,
         "humidity":0,
         "weather":[  
            {  
               "id":500,
               "main":"Rain",
               "description":"light rain",
               "icon":"10d"
            }
         ],
         "speed":3.1,
         "deg":270,
         "clouds":27,
         "rain":0.47
      }
   ]
}

最佳答案

您需要将 Dictionary 转换为 WeerItem 对象。由于您已经实现了自定义初始化程序,因此您可以直接调用它。

for weerData in json {
    self.weerItems.append(WeerItem(dictionary:weerData))
}

如果您使用的是 Swift 4,您应该使 WeerItem 符合 Decodable,然后您就不需要自定义初始化器了。

关于json - 无法将我的 JSON 附加到数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47909104/

有关json - 无法将我的 JSON 附加到数组的更多相关文章

  1. ruby-on-rails - 由于 "wkhtmltopdf",PDFKIT 显然无法正常工作 - 2

    我在从html页面生成PDF时遇到问题。我正在使用PDFkit。在安装它的过程中,我注意到我需要wkhtmltopdf。所以我也安装了它。我做了PDFkit的文档所说的一切......现在我在尝试加载PDF时遇到了这个错误。这里是错误:commandfailed:"/usr/local/bin/wkhtmltopdf""--margin-right""0.75in""--page-size""Letter""--margin-top""0.75in""--margin-bottom""0.75in""--encoding""UTF-8""--margin-left""0.75in""-

  2. ruby-on-rails - 在 Ruby 中循环遍历多个数组 - 2

    我有多个ActiveRecord子类Item的实例数组,我需要根据最早的事件循环打印。在这种情况下,我需要打印付款和维护日期,如下所示:ItemAmaintenancerequiredin5daysItemBpaymentrequiredin6daysItemApaymentrequiredin7daysItemBmaintenancerequiredin8days我目前有两个查询,用于查找maintenance和payment项目(非排他性查询),并输出如下内容:paymentrequiredin...maintenancerequiredin...有什么方法可以改善上述(丑陋的)代

  3. ruby - 多次弹出/移动 ruby​​ 数组 - 2

    我的代码目前看起来像这样numbers=[1,2,3,4,5]defpop_threepop=[]3.times{pop有没有办法在一行中完成pop_three方法中的内容?我基本上想做类似numbers.slice(0,3)的事情,但要删除切片中的数组项。嗯...嗯,我想我刚刚意识到我可以试试slice! 最佳答案 是numbers.pop(3)或者numbers.shift(3)如果你想要另一边。 关于ruby-多次弹出/移动ruby​​数组,我们在StackOverflow上找到一

  4. ruby - 将数组的内容转换为 int - 2

    我需要读入一个包含数字列表的文件。此代码读取文件并将其放入二维数组中。现在我需要获取数组中所有数字的平均值,但我需要将数组的内容更改为int。有什么想法可以将to_i方法放在哪里吗?ClassTerraindefinitializefile_name@input=IO.readlines(file_name)#readinfile@size=@input[0].to_i@land=[@size]x=1whilex 最佳答案 只需将数组映射为整数:@land边注如果你想得到一条线的平均值,你可以这样做:values=@input[x]

  5. ruby-on-rails - 无法使用 Rails 3.2 创建插件? - 2

    我对最新版本的Rails有疑问。我创建了一个新应用程序(railsnewMyProject),但我没有脚本/生成,只有脚本/rails,当我输入ruby./script/railsgeneratepluginmy_plugin"Couldnotfindgeneratorplugin.".你知道如何生成插件模板吗?没有这个命令可以创建插件吗?PS:我正在使用Rails3.2.1和ruby​​1.8.7[universal-darwin11.0] 最佳答案 随着Rails3.2.0的发布,插件生成器已经被移除。查看变更日志here.现在

  6. ruby - 无法运行 Rails 2.x 应用程序 - 2

    我尝试运行2.x应用程序。我使用rvm并为此应用程序设置其他版本的ruby​​:$rvmuseree-1.8.7-head我尝试运行服务器,然后出现很多错误:$script/serverNOTE:Gem.source_indexisdeprecated,useSpecification.Itwillberemovedonorafter2011-11-01.Gem.source_indexcalledfrom/Users/serg/rails_projects_terminal/work_proj/spohelp/config/../vendor/rails/railties/lib/r

  7. ruby - 通过 erb 模板输出 ruby​​ 数组 - 2

    我正在使用puppet为ruby​​程序提供一组常量。我需要提供一组主机名,我的程序将对其进行迭代。在我之前使用的bash脚本中,我只是将它作为一个puppet变量hosts=>"host1,host2"我将其提供给bash脚本作为HOSTS=显然这对ruby​​不太适用——我需要它的格式hosts=["host1","host2"]自从phosts和putsmy_array.inspect提供输出["host1","host2"]我希望使用其中之一。不幸的是,我终其一生都无法弄清楚如何让它发挥作用。我尝试了以下各项:我发现某处他们指出我需要在函数调用前放置“function_”……这

  8. ruby-on-rails - 无法在centos上安装therubyracer(V8和GCC出错) - 2

    我正在尝试在我的centos服务器上安装therubyracer,但遇到了麻烦。$geminstalltherubyracerBuildingnativeextensions.Thiscouldtakeawhile...ERROR:Errorinstallingtherubyracer:ERROR:Failedtobuildgemnativeextension./usr/local/rvm/rubies/ruby-1.9.3-p125/bin/rubyextconf.rbcheckingformain()in-lpthread...yescheckingforv8.h...no***e

  9. ruby - 检查数组是否在增加 - 2

    这个问题在这里已经有了答案:Checktoseeifanarrayisalreadysorted?(8个答案)关闭9年前。我只是想知道是否有办法检查数组是否在增加?这是我的解决方案,但我正在寻找更漂亮的方法:n=-1@arr.flatten.each{|e|returnfalseife

  10. ruby - 无法让 RSpec 工作—— 'require' : cannot load such file - 2

    我花了三天的时间用头撞墙,试图弄清楚为什么简单的“rake”不能通过我的规范文件。如果您遇到这种情况:任何文件夹路径中都不要有空格!。严重地。事实上,从现在开始,您命名的任何内容都没有空格。这是我的控制台输出:(在/Users/*****/Desktop/LearningRuby/learn_ruby)$rake/Users/*******/Desktop/LearningRuby/learn_ruby/00_hello/hello_spec.rb:116:in`require':cannotloadsuchfile--hello(LoadError) 最佳

随机推荐