如何从Firebase JSONObject中提取指定用户ID与邮箱?
提取Firebase用户ID和邮箱的方法
你的JSON结构里,identities下的apple.com和email都是仅包含单个元素的数组,直接提取数组的第一个元素即可。以下是几种常用语言的实现示例:
JavaScript/TypeScript
const userData = { "identities": { "apple.com": [ "11111.812763462834126346128349.2222" ], "email": [ "email@yahoo.com" ] }, "sign_in_provider": "apple.com" }; // 提取Apple用户ID const appleUserId = userData.identities["apple.com"][0]; // 提取邮箱 const userEmail = userData.identities.email[0]; console.log(appleUserId); // 输出目标ID console.log(userEmail); // 输出目标邮箱
Java(使用org.json库)
import org.json.JSONObject; public class FirebaseDataExtraction { public static void main(String[] args) { String jsonStr = "{ \"identities\": {\"apple.com\": [\"11111.812763462834126346128349.2222\"],\"email\": [\"email@yahoo.com\"]},\"sign_in_provider\": \"apple.com\" }"; JSONObject userData = new JSONObject(jsonStr); JSONObject identities = userData.getJSONObject("identities"); // 提取Apple用户ID String appleUserId = identities.getJSONArray("apple.com").getString(0); // 提取邮箱 String userEmail = identities.getJSONArray("email").getString(0); System.out.println(appleUserId); System.out.println(userEmail); } }
Swift(Codable方式,更安全)
import Foundation struct FirebaseUser: Codable { let identities: Identities let signInProvider: String enum CodingKeys: String, CodingKey { case identities case signInProvider = "sign_in_provider" } } struct Identities: Codable { let appleCom: [String] let email: [String] enum CodingKeys: String, CodingKey { case appleCom = "apple.com" case email } } let jsonStr = """ { "identities": { "apple.com": [ "11111.812763462834126346128349.2222" ], "email": [ "email@yahoo.com" ] }, "sign_in_provider": "apple.com" } """ if let data = jsonStr.data(using: .utf8), let user = try? JSONDecoder().decode(FirebaseUser.self, from: data) { let appleUserId = user.identities.appleCom.first ?? "" let userEmail = user.identities.email.first ?? "" print(appleUserId) print(userEmail) }
核心思路
identities下的字段都是数组结构,你的场景中数组仅含一个元素,因此直接取数组的第一个元素(索引0或用first方法)即可。如果需要兼容数组为空的情况,可以增加空值判断避免报错。
内容的提问来源于stack exchange,提问作者ekashking
相关产品推荐
相关产品推荐

