J'essaie de créer cet objet JSON en Java et en difficulté:
{
"notification": {
"message": "test",
"sound": "sounds/alarmsound.wav",
"target": {
"apps": [
{
"id": "app_id",
"platforms": [
"ios"
]
}
]
}
},
"access_token": "access_token"
}
Toute aide sur la manière de créer cela en Java serait appréciée!
Si vous cherchez vraiment dans créer objets JSON, Jackson a tout ce que vous voulez:
final JsonNodeFactory factory = JsonNodeFactory.instance;
final ObjectNode node = factory.objectNode();
final ObjectNode child = factory.objectNode(); // the child
child.put("message", "test");
// etc etc
// and then:
node.set("notification", child); // node.put(String, ObjectNode) has been deprecated
La node
résultante est une ObjectNode
, qui hérite de JsonNode
, ce qui signifie que vous obtenez toutes les subtilités de JsonNode
:
.toString()
;.get()
, .path()
- GSON n’a pas d’équivalent pour cela, en particulier pas .path()
, car il ne peut pas modéliser un nœud manquant);MissingNode
pour représenter un nœud absent et NullNode
pour représenter JSON null, héritant tous de JsonNode
(GSON n'a pas d'équivalent pour cela - et toutes les méthodes de navigation de JsonNode
sont également disponibles sur de tels nœuds);.equals()
/.hashCode()
.Pour ceux qui essaient d'utiliser les réponses de ce fil, notez que
JsonNodeFactory nodeFactory = new JsonNodeFactory();
Ne fonctionne plus avec le paquet jackson-databind. Au lieu de cela, vous devriez faire
final JsonNodeFactory nodeFactory = JsonNodeFactory.instance;
Voir cette réponse: https://stackoverflow.com/a/16974850/3824918
JSONObject jsonComplex = new JSONObject();
JSONObject notification = new JSONObject();
notification.put("message", "test");
notification.put("sound", "sounds_alarmsound.wav");
JSONObject targetJsonObject= new JSONObject();
JSONArray targetJsonArray= new JSONArray();
JSONObject appsJsonObject= new JSONObject();
appsJsonObject.put("id","app_id");
JSONArray platformArray = new JSONArray();
platformArray.add("ios");
appsJsonObject.put("platforms",platformArray);
targetJsonArray.add(appsJsonObject);
targetJsonObject.put("apps", targetJsonArray);
notification.put("target", targetJsonObject);
jsonComplex.put("notification", notification);
jsonComplex.put("access_token", "access_token");
System.out.println(jsonComplex);
Merci à @fge qui a fourni les informations nécessaires pour résoudre ce problème.
Voici ce que j'ai fait pour résoudre ce problème!
JsonNodeFactory nodeFactory = new JsonNodeFactory ();
ObjectNode pushContent = nodeFactory.objectNode();
ObjectNode notification = nodeFactory.objectNode();
ObjectNode appsObj = nodeFactory.objectNode();
ObjectNode target = nodeFactory.objectNode();
ArrayNode apps = nodeFactory.arrayNode();
ArrayNode platforms = nodeFactory.arrayNode();
platforms.add("ios");
appsObj.put("id","app_id");
appsObj.put("platforms",platforms);
apps.add(appsObj);
notification.put("message",filledForm.field("text").value());
notification.put("sound","sounds/alarmsound.wav");
notification.put("target", target);
target.put("apps",apps);
pushContent.put("notification", notification);
pushContent.put("access_token","access_token");
if(!filledForm.field("usage").value().isEmpty()) {
target.put("usage",filledForm.field("usage").value());
}
if(!filledForm.field("latitude").value().isEmpty() && !filledForm.field("longitude").value().isEmpty() && !filledForm.field("radius").value().isEmpty()) {
target.put("latitude",filledForm.field("latitude").value());
target.put("longitude",filledForm.field("longitude").value());
target.put("radius",filledForm.field("radius").value());
}
L'impression de pushContent à la sortie de l'objet json exact que je devais créer!
J'espère que cela aide quelqu'un d'autre aussi!
Riches
Je préfère créer des classes représentant cet objet et le convertir en JSON. Je suppose que vous avez cette interface JSON ailleurs et que vous avez beaucoup à faire pour la créer à partir de Java.
class ToJson{
private Notification notification;
private String access_token;
}
public class Notification{
private String message;
private String sound;
private Target target;
}
public class Target{
private Apps apps[];
}
public class Apps{
private String id;
private Plataform plataforms[];
}
public class Plataform{
privte String ios;
}
Ensuite, vous convertissez un objet ToJson rempli en JSON en utilisant la lib/framework de votre choix.
Il existe une variété de bibliothèques qui peuvent vous aider ici.
Si vous rencontrez des problèmes plus spécifiques avec ces bibliothèques, vous devez les poster.