- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我目前正在从服务器下载数据,但我不确定如何获得响应以返回我正在使用的方法所期望的格式。有人可以指导我如何将 JSON 响应中的所有项目添加到 [[String : AnyObject]] 格式吗?
提前致谢!
我要返回的 JSON
{
"Green Shirt": [
{
"id": "740",
"name": “Nice Green Shirt",
"quantity": "0",
"make": "",
"model": "",
"price": “15.00",
"size": "XXS",
"sku": null,
"image": "https:\/\/google.com\/green_shirt.jpg",
"new_record": false,
"category_name": "",
"bar_code": "",
},
{
"id": "743",
"name": "Green Shirt",
"quantity": “68",
"make": "",
"model": "",
"price": “20.00",
"size": "XS",
"sku": null,
"image": "https:\/\/google.com\/green_shirt.jpg",
"new_record": false,
"category_name": "",
"bar_code": "",
}
],
"Dark Blue Jeans": [
{
"id": "1588",
"name": "Dark Blue Jeans",
"quantity": "0",
"make": "",
"model": "",
"price": "0.00",
"size": “S",
"sku": null,
"image": "https:\/\/google.com\/dark_blue_jeans.jpg",
"new_record": false,
"category_name": "",
"bar_code": "",
"category": null
},
{
"id": "1559",
"name": "Dark Blue Jeans",
"quantity": "4",
"make": "",
"model": "",
"price": "0.00",
"size": “XL",
"sku": null,
"image": "https:\/\/google.com\/dark_blue_jeans.jpg",
"new_record": false,
"category_name": "",
"bar_code": "",
"category": null
}
],
"White Belt": [
{
"id": "1536",
"name": "White Belt",
"quantity": "37",
"make": "",
"model": "",
"price": "0.00",
"size": "One Size",
"sku": null,
"image": "https:\/\/google.com\/white_belt.jpg",
"new_record": false,
"category_name": "",
"bar_code": "",
"category": null
}
]
}
我想做的是将“Green Shirt”、“Dark Blue Jeans”和“White Belt”中的所有元素放入 [[String : AnyObject]] 格式
// 1 - Make the HTTP Request
var endpoint = NSURL(string: "https://www.mycustomsite.com/get-inventory")
var data = NSData(contentsOfURL: endpoint!)
// 2 - Validate and Deserialize the response
if let json: NSDictionary = NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions.MutableContainers, error: nil) as? NSDictionary {
}
最佳答案
诀窍是为转换声明正确的类型。
对于您的数据,我们正在使用 [String: [[String: AnyObject]]]
:一个以 String 作为键并以字典数组作为值的字典,这些字典的值为 AnyObject
因为有几种可能的类型。
成功解码后,我们打印生成的字典(结果 1)。
然后,作为示例,我们遍历包含在键“Green Shirt”后面的数组中的字典,并显示它们的 ID 和大小。
最后一个例子:获取包含所有衣服对象的数组。
if let json = NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions.allZeros, error: nil) as? [String: [[String: AnyObject]]] {
// Result 1
println(json)
// Example of how to parse the data
if let allGreenShirts = json["Green Shirt"] {
for greenShirt in allGreenShirts {
if let id = greenShirt["id"] as? String, let size = greenShirt["size"] as? String {
println("ID \(id) is of size \(size)")
}
}
}
// If you want an array of all the clothes, populate an array of dictionaries:
var allClothes = [[String:AnyObject]]()
for (_, clothes) in json {
allClothes += clothes
}
println(allClothes)
}
结果 1:
[White Belt: [[size: One Size, price: 0.00, category: , make: , model: , image: https://google.com/white_belt.jpg, category_name: , new_record: 0, name: White Belt, sku: , id: 1536, quantity: 37, bar_code: ]], Green Shirt: [[size: XXS, price: 15.00, sku: , name: Nice Green Shirt, id: 740, make: , model: , image: https://google.com/green_shirt.jpg, category_name: , quantity: 0, bar_code: , new_record: 0], [size: XS, price: 20.00, sku: , name: Green Shirt, id: 743, make: , model: , image: https://google.com/green_shirt.jpg, category_name: , quantity: 68, bar_code: , new_record: 0]], Dark Blue Jeans: [[size: S, price: 0.00, category: , make: , model: , image: https://google.com/dark_blue_jeans.jpg, category_name: , new_record: 0, name: Dark Blue Jeans, sku: , id: 1588, quantity: 0, bar_code: ], [size: XL, price: 0.00, category: , make: , model: , image: https://google.com/dark_blue_jeans.jpg, category_name: , new_record: 0, name: Dark Blue Jeans, sku: , id: 1559, quantity: 4, bar_code: ]]]
例子:
ID 740 is of size XXS
ID 743 is of size XS
所有衣服的数组:
[[size: One Size, price: 0.00, category: , make: , model: , image: https://google.com/white_belt.jpg, category_name: , new_record: 0, name: White Belt, sku: , id: 1536, quantity: 37, bar_code: ], [size: XXS, price: 15.00, sku: , name: Nice Green Shirt, id: 740, make: , model: , image: https://google.com/green_shirt.jpg, category_name: , quantity: 0, bar_code: , new_record: 0], [size: XS, price: 20.00, sku: , name: Green Shirt, id: 743, make: , model: , image: https://google.com/green_shirt.jpg, category_name: , quantity: 68, bar_code: , new_record: 0], [size: S, price: 0.00, category: , make: , model: , image: https://google.com/dark_blue_jeans.jpg, category_name: , new_record: 0, name: Dark Blue Jeans, sku: , id: 1588, quantity: 0, bar_code: ], [size: XL, price: 0.00, category: , make: , model: , image: https://google.com/dark_blue_jeans.jpg, category_name: , new_record: 0, name: Dark Blue Jeans, sku: , id: 1559, quantity: 4, bar_code: ]]
请注意,使用我们的映射,我们还可以使用 flatMap
轻松创建 allClothes
而不是创建循环:
let allClothes = flatMap(json, { $1 })
因此,总而言之,这是我们包含在一个类中的函数,作为您如何使用它的示例。
class DataManager {
typealias myJSONDic = [String: [[String: AnyObject]]]
func getClothesDictionaryFromJSON(data: NSData) -> myJSONDic? {
if let json = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.allZeros, error: nil) as? myJSONDic {
return json
}
return nil
}
func shirtsSizes(json: myJSONDic, category: String) -> [String] {
var shirts = [String]()
if let allShirtsInCategory = json[category] {
for shirt in allShirtsInCategory {
if let id = shirt["id"] as? String, let size = shirt["size"] as? String {
shirts.append("ID \(id) is of size \(size)")
}
}
}
return shirts
}
func getAllClothes(json: myJSONDic) -> [[String: AnyObject]] {
return flatMap(json, { $1 })
}
}
let manager = DataManager()
let clothesDictionary = manager.getClothesDictionaryFromJSON(data!)
let greenShirtsSizes = manager.shirtsSizes(clothesDictionary!, category: "Green Shirt")
let allClothes = manager.getAllClothes(clothesDictionary!)
请注意,在这个类示例中,我们为字典的类型创建了一个typealias
,这样写和读起来更方便。
Swift 2 更新
class DataManager {
typealias myJSONDic = [String: [[String: AnyObject]]]
func getClothesDictionaryFromJSON(data: NSData) -> myJSONDic? {
do {
if let json = try NSJSONSerialization.JSONObjectWithData(data, options: []) as? myJSONDic {
return json
}
} catch let error as NSError {
print(error)
}
return nil
}
func shirtsSizes(json: myJSONDic, category: String) -> [String] {
var shirts = [String]()
if let allShirtsInCategory = json[category] {
for shirt in allShirtsInCategory {
if let id = shirt["id"] as? String, let size = shirt["size"] as? String {
shirts.append("ID \(id) is of size \(size)")
}
}
}
return shirts
}
func getAllClothes(json: myJSONDic) -> [[String: AnyObject]] {
return json.flatMap { $1 }
}
}
let manager = DataManager()
if let data = data, let clothesDictionary = manager.getClothesDictionaryFromJSON(data) {
let greenShirtsSizes = manager.shirtsSizes(clothesDictionary, category: "Green Shirt")
let allClothes = manager.getAllClothes(clothesDictionary)
print(greenShirtsSizes)
print(allClothes)
}
关于swift - 将 JSON 解析为可用格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30923592/
有没有办法使用 Clojure format(基于 java.util.Formatter)或 cl-format(基于 Common Lisp 的format) 以编程方式设置空格填充?如果您事先知
我正在尝试创建一个用户实体以及数据/文件(pdf格式)。上传并保存到数据库很好,但是当我让用户进入 postman 时尝试发送获取请求方法,然后在数据字段中显示一些糟糕的数据,而且我无法在数据库中看到
我必须将值为 {"STX","ETX"} 的普通字符串数组转换为十六进制值,并且我应该根据 http://www.asciitable.com/ 得到 {2,3} . 最佳答案 听起来你想要一个 Ma
我想格式化我的代码,但不确定哪种格式类型最适合我的项目需要。 我发现仅对于 dart 和 flutter 项目(我都有),有不止一个选项可用于格式化编程语言/框架中预先构建的代码。 Dart : da
我已经尝试了多个代码,例如这样 Sub DateFixer() Application.ScreenUpdating = False Application.Calculation =
SolrQuery query = new SolrQuery(); query.setQuery("*:*"); query.add("wt","csv"); server.query(query)
我有一个包含多个字符串的数据库,我从查询中获取了这些记录,并且我在 QString 中收到了这种格式的数据: "Mon, 13 Nov 2017 09:48:45 +0000" 所以,我需要根据文化来
我有一个 Delphi 2007 DBGrid,我想让用户以更新的 Excel 格式 (OOXML) 保存它,但我的标准是用户不需要安装 Excel。有没有人知道任何已经这样做的组件?是的,我已经搜索
我正在我们的普通 html 站点旁边创建一个移动站点。使用 rails 3.1。移动站点在子域 m.site.com 中访问。 我已经定义了移动格式(Mime::Type.register_alias
我正在尝试使用 xmlstarlet 格式化 xml 文件,但我不想创建新的 xml 文件。 我试过了 xmlstarlet fo --inplace --indent-tab --omit-decl
我在 A 列中有一个带有文本的电子表格。 例如 A1=MY TEXT1 A2=MY TEXT2 A3=MY TEXT3 A4=MY TEXT4 A5=MY TEXT5 我想在文本的前后添加撇号 结果是
我想做一些源代码转换(自动导入列表清理),我想保留注释和格式。我听说过一些关于解析器这样做的事情,我认为是 ghc 解析器。 看起来我可以通过从文件中提取内容来使用 hs-src-exts Langu
我在 Excel 中工作,我想根据另一张表中的列表找出一张表中是否有匹配项。 我已将值粘贴到列表中,并希望从另一张表中返回它们的相应值。包含字母和数字的单元格可以正常工作(例如:D5765000),但
我有一个 DurationField在我的模型中定义为 day0 = models.DurationField('Duration for Monday', default=datetime.time
我正在为我的应用程序开发 WMI 查询。它需要为给定的 VID/PID 找到分配的虚拟 COM 端口。使用 WMI Code Creator 我发现...... 命名空间:root\CIMV2 类:W
我试图弄清楚如何使用 NSTextList,但除了 this SO question 之外,在网上几乎没有找到有用的信息。和 the comment in this blog . 使用这个我已经能够创
我要查询all_objects表在哪里last_ddl_time='01 jan 2010'但它拒绝日期格式... 任何机构给我查询的确切格式? 最佳答案 正如 AKF 所说,您应该使用 Trunc除
我试图在我的应用程序中实现聊天功能。我使用了 2 个 JEditorPane。一个用于保存聊天记录,另一个用于将聊天发送到前一个 JEditorPane。 JEditorPane 是 text/h
我在大学里修了一个编译器类(class),内容非常丰富,很有趣,尽管也很多工作。既然给了我们要实现的语言规范,所以我学不到的一件事就是语言设计。我现在正在考虑创建一种有趣的简单玩具语言,以便我可以玩耍
Closed. This question does not meet Stack Overflow guidelines。它当前不接受答案。 想改善这个问题吗?更新问题,以便将其作为on-topic
我是一名优秀的程序员,十分优秀!