web-dev-qa-db-fra.com

Utilisation de gson pour désérialiser un champ JSON spécifique d'un objet

J'ai la chaîne JSON suivante:

{
    "ms": "images,5160.1",
    "turl": "http://ts1.mm.bing.net/th?id=I4693880201938488&pid=1.1",
    "height": "178",
    "width": "300",
    "imgurl": "http://www.attackingsoccer.com/wp-content/uploads/2011/07/World-Cup-2012-Draw.jpg",
    "offset": "0",
    "t": "World Cup 2014 Qualification – Europe Draw World Cup 2012 Draw ...",
    "w": "719",
    "h": "427",
    "ff": "jpeg",
    "fs": "52",
    "durl": "www.attackingsoccer.com/2011/07/world-cup-2012-qualification-europe...",
    "surl": "http://www.attackingsoccer.com/2011/07/world-cup-2012-qualification-europe-draw/world-cup-2012-draw/",
    "mid": "D9E91A0BA6F9E4C65C82452E2A5604BAC8744F1B",
    "k": "6",
    "ns": "API.images"
}

J'ai besoin de stocker la valeur de imgurl dans une chaîne distincte.

C'est ce que j'ai jusqu'à présent, mais cela me donne juste la chaîne JSON entière au lieu du champ imgurl spécifique.

Gson gson = new Gson();
Data data = new Data();
data = gson.fromJson(toExtract, Data.class);
System.out.println(data);

toExtract est la chaîne JSON. Voici ma classe de données:

public class Data 
{
    public List<urlString> myurls;
}

class urlString
{
    String imgurl;
}
27
Sid

Lors de l'analyse d'une structure aussi simple, pas besoin d'avoir des classes dédiées.

Solution 1:

Pour obtenir l'imgurURL de votre chaîne avec gson, vous pouvez faire ceci:

JsonParser parser = new JsonParser();
JsonObject obj = parser.parse(toExtract).getAsJsonObject();
String imgurl = obj.get("imgurl").getAsString();

Cela utilise une analyse brute dans un JsonObject .

Solution 2:

Vous pouvez également extraire l'intégralité de vos données dans une instance Properties à l'aide de

 Properties data = gson.fromJson(toExtract, Properties.class);

et lisez votre URL avec

String imgurl = data.getProperty("imgurl");
50
Denys Séguret