- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
考虑以下要点:https://gist.github.com/anonymous/0703a591f97fa9f6ad35b29234805fbd - 没有有效的方式来显示所有相关信息,因为文件相当长。道歉
我有一些我正在尝试解码的嵌套 JSON 对象。
{
"establishments":[
{ ... }
],
"meta":{ ... },
"links":[
]
}
establishments
数组包含
Establishment
对象
ViewController.swift
的第 7 行我实际上在使用 Swift 4 的地方
JSONDecode()
功能。
let jsonURLString = "http://api.ratings.food.gov.uk/Establishments?address=\(self.getPostalCode(place: place))&latitude=\(place.coordinate.latitude.description)&longitude=\(place.coordinate.longitude.description)&maxDistanceLimit=0&name=\(truncatedEstablishmentName[0].replacingOccurrences(of: "'", with: ""))"
guard let url = URL(string: jsonURLString) else { print("URL is invalid"); return }
URLSession.shared.dataTask(with: url, completionHandler: { (data, response, error) in
guard let data = data, error == nil, response != nil else {
print("Something went wrong")
return
}
//print("test")
do {
let establishments = try JSONDecoder().decode(Establishments.self, from: data)
print(establishments)
} catch {
print("summots wrong")
}
}).resume()
Establishment.swift
中看到的映射 JSON 对象的输出是:
summots wrong
- 第 11 行,共
ViewController.swift
.
{
"establishments":[ ... ],
"meta":{ ... },
"links":[ ]
}
print("summots wrong")
print(error)
dataCorrupted(Swift.DecodingError.Context(codingPath: [], debugDescription: "The given data was not valid JSON.", underlyingError: Optional(Error Domain=NSCocoaErrorDomain Code=3840 "JSON text did not start with array or object and option to allow fragments not set." UserInfo={NSDebugDescription=JSON text did not start with array or object and option to allow fragments not set.})))
x-api-version
出现时,我使用的 API 默认为 XML 格式。未设置为
2
.
//print("test")
在我的
ViewController.swift
文件,我使用了推荐的:
print(String(data: data, encoding: .utf8))
线
x-api-version: 2
,
accept: application/json
和
content-type: application/json
检索我的 JSON 输出。如果我在浏览器窗口中使用相同的 GET 字符串(正确填写所有参数),我将收到一条错误消息:
The API 'Establishments' doesn't exist
以 XML 格式。
URLRequest
而不仅仅是 URL
.
ViewController.swift
代码:
let jsonURLString = "http://api.ratings.food.gov.uk/Establishments?address=\(self.getPostalCode(place: place))&latitude=\(place.coordinate.latitude.description)&longitude=\(place.coordinate.longitude.description)&maxDistanceLimit=0&name=\(truncatedEstablishmentName[0].replacingOccurrences(of: "'", with: ""))"
guard let url = URL(string: jsonURLString) else { print("URL is invalid"); return }
var request = URLRequest(url: url)
request.httpMethod = "GET"
request.addValue("x-api-version", forHTTPHeaderField: "2")
request.addValue("accept", forHTTPHeaderField: "application/json")
request.addValue("content-type", forHTTPHeaderField: "application/json")
URLSession.shared.dataTask(with: request, completionHandler: { (data, response, error) in
guard let data = data, error == nil, response != nil else {
print("Something went wrong")
return
}
print(String(data: data, encoding: .utf8))
// do {
// let establishments = try JSONDecoder().decode(Establishments.self, from: data)
// print(establishments)
// } catch {
// print(error)
// }
}).resume()
HTTP Error 400. The request has an invalid header name
x-api-version
header 值为 2。
addValue
的正确格式本来应该:
request.addValue("2", forHTTPHeaderField: 'x-api-version
等等。
Meta.(CodingKeys in _DF4B170746CD5543281B14E0B0E7F6FB).dataSource], debugDescription: "Expected String value but found null instead.", underlyingError: nil
meta
对象,一个包含值
null
为
dataSource
另一个是
Lucene
.
最佳答案
要自动解码,您的模型类属性必须与响应值类型匹配。从 JSON 响应中,我可以看到很少有数据模型属性与 JSON 值类型不匹配。例如:
//inside response
"Hygiene": 10, // which is integer type
// properties in Scores
let Hygiene: String
// changed from String
let Hygiene: Int
let Structural: Int
let ConfidenceInManagement: Int
// changed from Double
let longitude: String
let latitude: String
// changed to optional
let dataSource: String?
let returncode: String?
// changed from Int
let RatingValue: String
class Scores: Decodable {
// set as string because we can expect values such as 'exempt'
let Hygiene: Int
let Structural: Int
let ConfidenceInManagement: Int
init(Hygiene: Int, Structural: Int, ConfidenceInManagement: Int) {
self.Hygiene = Hygiene
self.Structural = Structural
self.ConfidenceInManagement = ConfidenceInManagement
}
}
class Geocode: Decodable {
let longitude: String
let latitude: String
init(longitude: String, latitude: String) {
self.longitude = longitude
self.latitude = latitude
}
}
class Meta: Decodable {
let dataSource: String?
let extractDate: String
let itemCount: Int
let returncode: String?
let totalCount: Int
let totalPages: Int
let pageSize: Int
let pageNumber: Int
init(dataSource: String, extractDate: String, itemCount: Int, returncode: String, totalCount: Int, totalPages: Int, pageSize: Int, pageNumber: Int) {
self.dataSource = dataSource
self.extractDate = extractDate
self.itemCount = itemCount
self.returncode = returncode
self.totalCount = totalCount
self.totalPages = totalPages
self.pageSize = pageSize
self.pageNumber = pageNumber
}
}
class Establishments: Decodable {
let establishments: [Establishment]
init(establishments: [Establishment]) {
self.establishments = establishments
}
}
class Establishment: Decodable {
let FHRSID: Int
let LocalAuthorityBusinessID: String
let BusinessName: String
let BusinessType: String
let BusinessTypeID: Int
let AddressLine1: String
let AddressLine2: String
let AddressLine3: String
let AddressLine4: String
let PostCode: String
let Phone: String
let RatingValue: String
let RatingKey: String
let RatingDate: String
let LocalAuthorityCode: Int
let LocalAuthorityName: String
let LocalAuthorityWebSite: String
let LocalAuthorityEmailAddress: String
let scores: Scores
let SchemeType: String
let geocode: Geocode
let RightToReply: String
let Distance: Double
let NewRatingPending: Bool
let meta: Meta
let links: [String]
init(FHRSID: Int, LocalAuthorityBusinessID: String, BusinessName: String, BusinessType: String, BusinessTypeID: Int, AddressLine1: String, AddressLine2: String, AddressLine3: String, AddressLine4: String, PostCode: String, Phone: String, RatingValue: String, RatingKey: String, RatingDate: String, LocalAuthorityCode: Int, LocalAuthorityName: String, LocalAuthorityWebSite: String, LocalAuthorityEmailAddress: String, scores: Scores, SchemeType: String, geocode: Geocode, RightToReply: String, Distance: Double, NewRatingPending: Bool, meta: Meta, links: [String]) {
self.FHRSID = FHRSID
self.LocalAuthorityBusinessID = LocalAuthorityBusinessID
self.BusinessName = BusinessName
self.BusinessType = BusinessType
self.BusinessTypeID = BusinessTypeID
self.AddressLine1 = AddressLine1
self.AddressLine2 = AddressLine2
self.AddressLine3 = AddressLine3
self.AddressLine4 = AddressLine4
self.PostCode = PostCode
self.Phone = Phone
self.RatingValue = RatingValue
self.RatingKey = RatingKey
self.RatingDate = RatingDate
self.LocalAuthorityCode = LocalAuthorityCode
self.LocalAuthorityName = LocalAuthorityName
self.LocalAuthorityWebSite = LocalAuthorityWebSite
self.LocalAuthorityEmailAddress = LocalAuthorityEmailAddress
self.scores = scores
self.SchemeType = SchemeType
self.geocode = geocode
self.RightToReply = RightToReply
self.Distance = Distance
self.NewRatingPending = NewRatingPending
self.meta = meta
self.links = links
}
}
关于json - 解码 JSON 对象(发送带参数的 GET 请求) - Swift 4 Decodable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46915397/
运行 PostgreSQL(7.4 和 8.x),我认为这是可行的,但现在我遇到了错误。 我可以单独运行查询,它工作得很好,但如果我使用 UNION 或 UNION ALL,它会抛出错误。 这个错误:
我试图为我的应用程序创建一个导航,使用抽屉导航我的 fragment 之一(HomeFragment)有一个 ViewPager,可容纳 3 个 fragment (Bundy Clock、Annou
以我目前正在开发的应用为例: - 它有一个包含多个项目的抽屉导航;现在有两个项目让我感兴趣,我将它们称为 X 和 Y。 X 和 Y 都在单击时显示包含 x 元素或 y 元素列表的 fragment 选
我有一个形状为 (370,275,210) 的 NumPy 数组,我想将其重新整形为 (275,210,370)。我将如何在 Python 中实现这一点? 370是波段数,275是行数,210是图像包
我们如何与被子 UIViewController 阻止的父 UIViewController(具有按钮)交互。显然,触摸事件不会通过子 Nib 。 (启用用户交互) 注意:我正在加载默认和自定义 NI
我是 Jpa 新手,我想执行过程 我的代码如下 private static final String PERSISTENCE_UNIT_NAME = "todos"; private static
与安装了 LAMP 的 GCE 相比,选择与 Google Cloud SQL 链接的 GCE 实例有哪些优势? 我确定 GCE 是可扩展的,但是安装在其上的 mysql 数据库的可扩展性如何? 使用
这个问题在这里已经有了答案: Value receiver vs. pointer receiver (3 个答案) 关闭 3 年前。 我刚接触 golang。只是想了解为 Calc 类型声明的两种
我不小心按了一个快捷键,一个非常漂亮的断线出现在日期上。 有点像 # 23 Jun 2010 -------------------- 有人知道有问题的快捷方式吗?? (我在 mac 上工作!) 在
我正在Scala中编写正则表达式 val regex = "^foo.*$".r 这很好,但是如果我想做 var x = "foo" val regex = s"""^$x.*$""".r 现在我们有
以下 XML 文档在技术上是否相同? James Dean 19 和: James Dean 19 最佳答案 这两个文档在语义上是相同的。在 X
我在对数据帧列表运行稳健的线性回归模型(使用 MASS 库中的 rlm)时遇到问题。 可重现的示例: var1 <- c(1:100) var2 <- var1*var1 df1 <- data.f
好的,我有一个自定义数字键盘,可以在标签(numberField)中将数字显示为 0.00,现在我需要它显示 $0.00。 NSString *digit = sender.currentTitle;
在基于文档的应用程序中,使用 XIB 文件,创建新窗口时其行为是: 根据最后一个事件的位置进行定位和调整大小 window 。 如果最后一个事件窗口仍然可见,则新窗口 窗口应该是级联的,这样它就不会直
我想使用参数进行查询,如下所示: SELECT * FROM MATABLE WHERE MT_ID IN (368134, 181956) 所以我考虑一下 SELECT * FROM MATABLE
我遇到一些性能问题。 我有一个大约有 200 万行的表。 CREATE TABLE [dbo].[M8]( [M8_ID] [int] IDENTITY(1,1) NOT NULL,
我在 jquery 中的按键功能遇到问题。我不知道为什么按键功能不起作用。我已经使用了正确的 key 代码。在我的函数中有 2 个代码,其中包含 2 个事件键,按一个键表示 (+) 代码 107 和(
我想显示音频波形,我得到了此代码,它需要.raw音频输入并显示音频波形,但是当我放入.3gp,.mp3音频时,我得到白噪声,有人可以帮助我如何使其按需与.3gp一起使用使用.3gp音频运行它。 Inp
我无法让 stristr 函数返回真值,我相信这是因为我的搜索中有一个 $ 字符。 当我这样做时: var_dump($nopricecart); 完整的 $nopricecart 值是 $0 ,我得
如果我有这样的循环: for(int i=0;i O(n) 次。所以do some执行了O(n)次。如果做某事是线性时间,那么代码片段的复杂度是O(n^2)。 关于algorithm - 带 If 语
我是一名优秀的程序员,十分优秀!