- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我需要将 JSON 数据输入到字典中,然后附加到数组中。
下面是应该发生的地方,但我得到了错误
this class is not key value coding-compliant for the key K0tA3yTnxAWxCFBZoeyAjcr3yYy1.'
let room = rooms[indexPath.row]
if let dictionary = room.members {
let user = User()
user.setValuesForKeys(dictionary)
liveCell.members.append(user)
}
下面是类
用户
class User: NSObject {
var email: String?
var name: String?
var profileImageUrl: String?
}
房间
class Room: NSObject {
var rid: String?
var owner: String?
var groupChatName: String?
var groupChatDescription: String?
var members: NSDictionary?
}
数据库中的房间对象
"rooms" : {
"B7C7E469-945E-4327-9473-AAE34FCB9B41" : {
"groupChatDescription" : "123ae",
"groupChatName" : "Test123",
"members" : {
"K0tA3yTnxAWxCFBZoeyAjcr3yYy1" : {
"email" : "S@gmail.com",
"name" : "Steve",
"profileImageUrl" : "https://firebasestorage.googleapis.com"
}
},
"owner" : "Steve"
}
},
概括一下,rooms是房间的数组,room是具体的房间对象,members是用户的数组,member是具体的用户。
我已经使用字典方法从我的数据库中检索用户,但我发现数据快照之间存在一些差异。
来自 FireBase 的 snapshot.value:
Optional({
email = "S@gmail.com";
name = Steve;
profileImageUrl =
"https://firebasestorage.googleapis.com";
})
这种格式适用于字典
使用 print(room.members)
的数据快照:
Optional({
K0tA3yTnxAWxCFBZoeyAjcr3yYy1 = {
email = "S@gmail.com";
name = Steve;
profileImageUrl =
"https://firebasestorage.googleapis.com";
};
})
这种格式不适用于字典,我相信这是因为键,但我不知道如何摆脱它,因为这基本上是我在成员数组中分隔每个成员的方式。
有什么建议吗?
至于 liveCell 是什么,这里有一个屏幕截图可以很好地解释它......
这是一个 liveCell,您可以看到数据匹配的位置。黄色矩形是另一个 uicollectionview,它包含成员个人资料图像数组,其中每个个人资料图像都将位于红色方 block 内。
希望这能解决问题
最佳答案
这里没有尝试修复所有这些代码,而是一种干净、简单的方法来填充一组房间,其中每个房间都有一组用户。
给定一个类似于您的 Firebase 结构
"rooms"
"room_0"
"groupChatName" : "Test123",
"members"
"user_0"
"name" : "Barry"
"user_1"
"name" : "Maurice"
"user_2"
"name" : "Robin"
我们从 RoomClass 和 UserClass 开始。请注意,我让这些类完成了繁重的工作——它们拆除快照并存储它的值。
请注意,我将成员子节点视为快照,因此我可以在维护它的键值对的同时对其进行迭代。
class RoomClass {
var key = ""
var groupChatName = ""
var membersArray = [UserClass]()
init(snapshot: DataSnapshot) {
let dict = snapshot.value as! [String: Any]
let membersSnap = snapshot.childSnapshot(forPath: "members")
let snapKey = snapshot.key
let groupName = dict["groupChatName"] as! String
self.key = snapKey
self.groupChatName = groupName
for member in membersSnap.children {
let memberSnap = member as! DataSnapshot
let user = UserClass(snapshot: memberSnap)
self.membersArray.append(user)
}
}
}
class UserClass {
var key = ""
var name = ""
init(snapshot: DataSnapshot) {
let dict = snapshot.value as! [String: Any]
let snapKey = snapshot.key
let userName = dict["name"] as! String
self.key = snapKey
self.name = userName
}
}
然后我们定义数组来存储房间和填充它的代码
var roomsArray = [RoomClass]()
func doButton0Action() {
let roomsRef = self.ref.child("rooms")
roomsRef.observeSingleEvent(of: .value, with: { snapshot in
for child in snapshot.children {
let snap = child as! DataSnapshot
let room = RoomClass(snapshot: snap)
self.roomsArray.append(room)
}
//this just demonstrates the rooms and members are loaded
for room in self.roomsArray {
let groupChatName = room.groupChatName
print(groupChatName)
for user in room.membersArray {
let userName = user.name
print(" \(userName)")
}
}
})
}
和输出
Test123
Barry
Maurice
Robin
关于swift - firebase json反序列化swift,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45494174/
最近开始学习MongoDB。今天老师教了我们 mongoexport 命令。在练习时,我遇到了一个典型的问题,包括教练在内的其他同学都没有遇到过。我在我的 Windows 10 机器上使用 Mongo
我是 JSON Schema 的新手,读过什么是 JSON Schema 等等。但我不知道如何将 JSON Schema 链接到 JSON 以针对该 JSON Schema 进行验证。谁能解释一下?
在 xml 中,我可以在另一个 xml 文件中包含一个文件并使用它。如果您的软件从 xml 获取配置文件但没有任何方法来分离配置,如 apache/ngnix(nginx.conf - site-av
我有一个 JSON 对象,其中包含一个本身是 JSON 对象的字符串。我如何反序列化它? 我希望能够做类似的事情: #[derive(Deserialize)] struct B { c: S
考虑以下 JSON { "a": "{\"b\": 12, \"c\": \"test\"}" } 我想定义一个泛型读取 Reads[Outer[T]]对于这种序列化的 Json import
关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 11 个月前关闭。 Improve
我的旧项目在 MySQL 中有 Standard JSON 格式的数据。 对于我在 JS (Node.js) 和 DynamoDB 中的全新项目,关于 Standard JSON格式: 是否建议将其转
JSON 值字符串、数字、true、false、null 是否是有效的 JSON? 即,是 true 一个有效的 JSON 文档?还是必须是数组/对象? 一些验证器接受这个(例如 http://jso
我有一个 JSON 字符串,其中一个字段是文本字段。这个文本字段可以包含用户在 UI 中输入的文本,如果他们输入的文本是 JSON 文本,也许是为了说明一些编码,我需要对他们的文本进行编码,以便它不会
我正在通过 IBM MQ 调用处理数据,当由 ColdFusion 10 (10,0,11,285437) 序列化时,0 将作为 +0.0 返回,它会导致无效的 JSON并且无法反序列化。 stPol
我正在从三个数组中生成一个散列,然后尝试构建一个 json。我通过 json object has array 成功了。 require 'json' A = [['A1', 'A2', 'A3'],
我从 API 接收 JSON,响应可以是 30 种类型之一。每种类型都有一组唯一的字段,但所有响应都有一个字段 type 说明它是哪种类型。 我的方法是使用serde .我为每种响应类型创建一个结构并
我正在下载一个 JSON 文件,我已将其检查为带有“https://jsonlint.com”的有效 JSON 到文档目录。然后我打开文件并再次检查,结果显示为无效的 JSON。这怎么可能????这是
我正在尝试根据从 API 接收到的数据动态创建一个 JSON 对象。 收到的示例数据:将数据解码到下面给出的 CiItems 结构中 { "class_name": "test", "
我想从字符串转换为对象。 来自 {"key1": "{\n \"key2\": \"value2\",\n \"key3\": {\n \"key4\": \"value4\"\n }\n
目前我正在使用以下代码将嵌套的 json 转换为扁平化的 json: import ( "fmt" "github.com/nytlabs/gojsonexplode" ) func
我有一个使用来自第三方 API 的数据的应用程序。我需要将 json 解码为一个结构,这需要该结构具有“传入”json 字段的 json 标签。传出的 json 字段具有不同的命名约定,因此我需要不同
我想使用 JSON 架构来验证某些值。我有两个对象,称它们为 trackedItems 和 trackedItemGroups。 trackedItemGroups 是组名称和 trackedItem
考虑以下案例类模式, case class Y (a: String, b: String) case class X (dummy: String, b: Y) 字段b是可选的,我的一些数据集没有字
我正在存储 cat ~/path/to/file/blah | 的输出jq tojson 在一个变量中,稍后在带有 JSON 内容的 curl POST 中使用。它运作良好,但它删除了所有换行符。我知
我是一名优秀的程序员,十分优秀!