web-dev-qa-db-fra.com

Conversion de la chaîne json en Java?

J'ai cherché des exemples liés à la conversion de chaînes JSON en Java mais je n'ai pas trouvé de bons exemples. Celui que j'ai trouvé était vraiment basique une fois et ne traitait pas vraiment avec des chaînes JSON complexes.

Je fais une application pour traduire des chaînes de l'anglais vers différentes langues en utilisant Google Translate API. La réponse de Google à la requête est ... le texte suivant est formaté en JSON,

{"data":{"translations":[{"translatedText":"Bonjour tout le monde"}]}} 

mon approche à ce jour utilise l'API GSON, cependant, je suis coincé par la façon dont je dois manipuler ce résultat compliqué et créer un objet Java?

Ma Java est ...

import com.google.gson.Gson;

public class JSONConverter {

private String traslatedText;

/**
 * Create an object of it self by manipulating json string
 * @param json type: String
 * @return String Translated text result from JSON responce
 */
public String getTranslation(String json){  
    Gson gson = new Gson();
    JSONConverter obj = gson.fromJson(json, JSONConverter.class);

    return obj.getTranslationForReturn();
}

/**
 * Method return a translation to a private call
 * @return String translation
 */
private String getTranslationForReturn(){
    return this.traslatedText;
 }
}

L'approche ci-dessus ne fonctionne pas car je ne reçois pas "Bonjour tout le monde" en retour,

ce serait un grand plaisir si quelqu'un pouvait étendre ma compréhension.

23
TeaCupApp

EDIT: Vous avez besoin de votre classe de données Java pour être un modèle exact du JSON. Ainsi, votre

{"data":{"translations":[{"translatedText":"Bonjour tout le monde"}]}} 

devient:

class DataWrapper {
    public Data data;

    public static DataWrapper fromJson(String s) {
        return new Gson().fromJson(s, DataWrapper.class);
    }
    public String toString() {
        return new Gson().toJson(this);
    }
}
class Data {
    public List<Translation> translations;
}
class Translation { 
    public String translatedText;
}

Au fur et à mesure que le modèle d'objet se complique, le code de style org.json vire vers l'illisible, tandis que le mappage d'objet de style gson/jackson est toujours simple Java objets.

26
Kevin

J'aime généralement utiliser la plaine bibliothèque org.json

Utilisez-le comme:

 // make sure the quotes are escaped
String str = "{\"data\":{\"translations\":[{\"translatedText\":\"Bonjour tout le monde\"}]}}";
 // the object data is inside a "global" JSONObject
data = new JSONObject(str).getJSONObject("data");
// get a JSONArray from inside an object
JSONArray translations = data.getJSONArray("translations");
// get the first JSONObject from the array
JSONObject text = translations.getJSONObject(0);
// get the String contained in the object -> logs Bonjour tout le monde
Log.d("***>Text", text.getString("translatedText"));

Peut-être que tant de code est moins clair que ce que j'aurais aimé. C'est la fonction que je ferais:

public String getTranslation(String json){  
  JSONObject data = new JSONObject(json).getJSONObject("data");
  return data.getJSONArray("translations").getJSONObject(0).getString("translatedText");
}
11
Aleadam

vérifiez cela Conversion de JSON en Java , je suppose que vous pouvez définir une classe comme objet et le transmettre. Alors, créez une classe et passez-la.

Data obj = gson.fromJson(json, Data.class);

class Data{
  public List<Data> getTranslation(){
     return translations;
  }
}

Essayez quelque chose comme ça. Vous devrez peut-être expérimenter un peu.

10
Matt