swift - 在 Swift 中解码未封装在父 JSON 中的 JSON 列表
问题描述
所以以下是端点返回的内容。有没有更好的方法将其解码为对象数组,而不是将数据转换为字符串,附加字符串以使其成为有效的 JSON,然后将该字符串转换回数据并解码...
编辑:我提出的解决方案甚至不能很好地工作,因为对象之间没有逗号
edit2:正则表达式是我唯一的答案吗?
如果它只是封装在 {餐馆:[]} 中会容易得多:(
{"address": {"building": "8825", "coord": [-73.8803827, 40.7643124], "street": "Astoria Boulevard", "zipcode": "11369"}, "borough": "Queens", "cuisine": "American", "grades": [{"date": {"$date": 1416009600000}, "grade": "Z", "score": 38}, {"date": {"$date": 1398988800000}, "grade": "A", "score": 10}, {"date": {"$date": 1362182400000}, "grade": "A", "score": 7}, {"date": {"$date": 1328832000000}, "grade": "A", "score": 13}], "name": "Brunos On The Boulevard", "restaurant_id": "40356151"}
{"address": {"building": "2206", "coord": [-74.1377286, 40.6119572], "street": "Victory Boulevard", "zipcode": "10314"}, "borough": "Staten Island", "cuisine": "Jewish/Kosher", "grades": [{"date": {"$date": 1412553600000}, "grade": "A", "score": 9}, {"date": {"$date": 1400544000000}, "grade": "A", "score": 12}, {"date": {"$date": 1365033600000}, "grade": "A", "score": 12}, {"date": {"$date": 1327363200000}, "grade": "A", "score": 9}], "name": "Kosher Island", "restaurant_id": "40356442"}
{"address": {"building": "7114", "coord": [-73.9068506, 40.6199034], "street": "Avenue U", "zipcode": "11234"}, "borough": "Brooklyn", "cuisine": "Delicatessen", "grades": [{"date": {"$date": 1401321600000}, "grade": "A", "score": 10}, {"date": {"$date": 1389657600000}, "grade": "A", "score": 10}, {"date": {"$date": 1375488000000}, "grade": "A", "score": 8}, {"date": {"$date": 1342569600000}, "grade": "A", "score": 10}, {"date": {"$date": 1331251200000}, "grade": "A", "score": 13}, {"date": {"$date": 1318550400000}, "grade": "A", "score": 9}], "name": "Wilken'S Fine Food", "restaurant_id": "40356483"}
{"address": {"building": "6409", "coord": [-74.00528899999999, 40.628886], "street": "11 Avenue", "zipcode": "11219"}, "borough": "Brooklyn", "cuisine": "American", "grades": [{"date": {"$date": 1405641600000}, "grade": "A", "score": 12}, {"date": {"$date": 1375142400000}, "grade": "A", "score": 12}, {"date": {"$date": 1360713600000}
解决方案
这是 JSON 行格式。只需拆分\n
并映射到 JSONDecoder。假设您将其作为一个长字符串:
let result = try json.split(separator: "\n")
.map { Data($0.utf8) }
.map { try JSONDecoder().decode(Record.self, from: $0) }
推荐阅读
- javascript - uniqid 已安装但我无法使用它的功能
- java - 对于 addHead 方法,为什么要检查 tail == null?
- linux - How to grep through many files of same file type
- excel - Excel: Help me use COUNTIFS to find A or B, but NOT A and B
- drupal - How to redirect fake .htaccess path from 403 to 404
- javascript - create object and object length
- c - 为什么使用 malloc 分配内存块不遵循先拟合?
- html - 如何将图像的无序列表居中?
- excel - 使用变量分配单元格编号(不是单元格值)
- bash - 如何使用 systemd timer 下载并执行远程 bash 脚本?