我是新手使用 Firebase,我想将 JSON 对象数据放入 Firebase 中。我知道如何将类对象作为数据放入 Firebase,但我想放入 JSON 对象数据。
是否有一种方法可以将 JSON 对象数据放入 Firebase 而不将其转换为 POJO?
可以实现。首先将您的json转换为字符串,然后执行以下操作:
String jsonString; //set to json string
Map<String, Object> jsonMap = new Gson().fromJson(jsonString, new TypeToken<HashMap<String, Object>>() {}.getType());
我正在使用"updateChildren"方法,因为我希望将JSON对象直接添加到我的子对象的根目录下。 firebaseDatabaseRef.child("users").child(uid).updateChildren(jsonMap);
如果您不在意或想设置一个新的节点,请使用
firebaseDatabaseRef.child("users").child(uid).child({your new node}).setValue(jsonMap);
在Firebase上保存JSON值也非常简单。假设您已经调用了Firebase引用。
Firebase ref = new Firebase("https://docs-examples.firebaseio.com/android/saving-data/fireblog");
然后,您将使用Map
对象传递数据。 Map
使用键保留值。在您的情况下,您将拥有一个String
键和JSONObject
值。
Firebase userRef = ref.child("user");
Map<String, JSONObject> userMap= new HashMap<String, JSONObject>();
JSONObject tempObject = new JSONObject();
try{
tempObject.put("birthday","1992");
tempObject.put("fullName","Emin AYAR");
}catch(Exception e){
e.printStackTrace();
}
userMap.put("myUser", tempObject);
userRef .setValue(userMap);
如此建议:将JSON字符串转换为HashMap
你可以轻松地将json对象/字符串转换为Map<String,Object>
(甚至不需要创建POJO):
Firebase ref = new Firebase(YOUR_FIREBASE_REF);
Map<String, Object> map = new Gson().fromJson(jsonString, new TypeToken<HashMap<String, Object>>() {}.getType());
ref.setValue(map);
根据您在问题中标记的Android,我猜测您想从Android客户端将一些数据放入Firebase数据库。
您有一些JSON数据,并希望将其存储在Firebase数据库中,是吗?以下是实现此操作的逐步过程。
我不太明白为什么您要避免使用POJO。它使整个操作更简化。现在让我们假设您有一个JSON字符串。您需要将JSON映射到一个Java类,以直接将其放入Firebase中。 Firebase以JSON格式存储数据,这很容易理解。
我使用Gson将JSON字符串映射到特定的Java对象。这是我目前发现的最简单的方法,只需要几行代码。
Gson gson = new Gson();
YourPOJO myPOJO = gson.fromJson(jsonString, YourPOJO.class);
现在你已经成功地将JSON字符串映射到myPOJO
对象上了。现在你可以把这个对象放到Firebase数据库中了。
让我们先引用你的Firebase数据库,然后在你想要放置数据的特定节点中调用setValue
。
Firebase ref = new Firebase(YOUR_FIREBASE_REF);
ref.setValue(myPOJO);
Kotlin 解决方案,因为自动转换会在编译时出现错误,提示“无法推断参数 T 的足够信息”,请参考:Kotlin 和 Android 中无法推断参数 T 的足够信息
val jsonMap = Gson().fromJson<Any>(stringJson, object : TypeToken<HashMap<String, Any>>() {}.type)
Map<String,Object>
,那么您可以像处理POJO一样将其传递到ref.setValue()
中(就像Emin回答的那样)。 - Frank van Puffelen