web-dev-qa-db-fra.com

enregistrer un objet json sur firebase sous android

Je suis nouveau sur firebase et j'essaye de mettre des données d'objet json dans ma base de fire. Je sais comment mettre des données en tant qu'objet de classe dans firebase, mais je veux mettre des données d'objet json.

Est-il possible de mettre des données d'objet Json dans Firebase sans les convertir en pojo?

6
shj

Comme vous avez marqué Android dans votre question, je suppose donc que vous souhaitez insérer des données dans votre base de données Firebase à partir du client Android. 

Vous avez des données JSON et vous souhaitez les stocker dans la base de données Firebase, n'est-ce pas? Ceci est la procédure étape par étape pour y parvenir.

Je ne sais pas vraiment pourquoi vous essayez d'éviter POJO. Cela simplifie l'opération totale. Supposons maintenant que vous avez une chaîne JSON. Vous devez mapper votre JSON sur une classe Java pour le placer directement dans la base de feu. Firebase stocke les données dans un format de type JSON, ce qui est facilement compréhensible. 

J'utilise Gson pour mapper une chaîne JSON sur un objet Java spécifique. C'est la méthode la plus simple que j'ai trouvée jusqu'à présent qui nécessite peu de lignes de codage. 

Gson gson = new Gson();
YourPOJO myPOJO = gson.fromJson(jsonString, YourPOJO.class);

Vous avez maintenant mappé votre chaîne JSON sur l'objet myPOJO avec succès. Vous êtes prêt à mettre cet objet dans votre base de données Firebase maintenant. 

Prenons la référence à votre base de données Firebase, puis appelons setValue dans le nœud spécifique où vous souhaitez placer les données. 

Firebase ref = new Firebase(YOUR_FIREBASE_REF);
ref.setValue(myPOJO);

Simple! 

1
Reaz Murshed

Oui, vous pouvez y arriver. Commencez par convertir votre json en chaîne puis procédez comme suit: 

  String jsonString; //set to json string
  Map<String, Object> jsonMap = new Gson().fromJson(jsonString, new TypeToken<HashMap<String, Object>>() {}.getType());

J'utilise la méthode "updateChildren" car je veux que l'objet JSON soit ajouté directement à la racine de mon objet enfant.

  firebaseDatabaseRef.child("users").child(uid).updateChildren(jsonMap);

Si cela vous est égal ou si vous souhaitez définir un nouveau nœud, utilisez

 firebaseDatabaseRef.child("users").child(uid).child({your new node}).setValue(jsonMap);
7
GraSim

Il est si simple de sauvegarder également la valeur JSON sur Firebase. Disons que vous avez appelé votre référence de base de feu

Firebase ref = new Firebase("https://docs-examples.firebaseio.com/Android/saving-data/fireblog");

Ensuite, vous passerez vos données avec des objets Map. Map conserve les valeurs avec les clés. Dans votre cas, vous aurez une clé String et une valeur 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);
5
Emin Ayar

Comme suggéré ici: Convertir une chaîne JSON en HashMap

vous pouvez facilement convertir votre objet/chaîne json en un Map<String, Object> (vous n'avez même pas besoin de créer un 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);
2
Vincent de Lagabbe

Solution Dans Kotlin car la conversion automatique le convertit avec une erreur de compilation en disant: "Pas assez d'informations pour déduire le paramètre T" avec Kotlin et Android

val jsonMap = Gson().fromJson<Any>(stringJson, object : TypeToken<HashMap<String, Any>>() {}.type)
0
AndyGeek