2013-05-20 35 views
-2

使用GSON,我如何从多维Json字符串返回单个键?使用GSON解析JSON字符串尽可能简单

这里是多维的JSON字符串:

{"statusCode":0,"statusDescription":"OK","data":{"user":{"id":xxx,"company_id":xxx,"account_type":"5","enable_locations":true,"intuit_user_id":null,"nick_name":"xxx","is_owner":"1","enabled":"1"},"session_token":"xxx"}} 

我要回了 “session_token” 的键值。

我想这一点:

class app { 
    static class Response { 
     String session_token; 
    } 
    public void getSessionToken() { 

     String x = {"statusCode":0,"statusDescription":"OK","data":{"user":{"id":xxx,"company_id":xxx,"account_type":"5","enable_locations":true,"intuit_user_id":null,"nick_name":"xxx","is_owner":"1","enabled":"1"},"session_token":"xxx"}} 
     Response r = new Gson().fromJson(x, Response.class); 
     System.out.println(r.session_token); 
    } 
} 

但有了这个,我r.session_token返回null。

+0

呵呵?所以你在服务器端手动创建一个JSON字符串,并试图通过提供密钥来获取值? –

+0

@wirey不....我只是做了一个例子。我从Web服务器检索JSON字符串,我需要解析它。但我只需要一个键,没有别的。 – Alexandre

+0

@wirey,什么? getParameter不仅适用于GET和POST参数? getParameter如何帮助我获取页面上的字符串(从Web服务器中获取)?字符串是这样的:'http:// setster.com/api/v2/company/6877/service' – Alexandre

回答

3

您将需要直接使用GSON的JsonParser类,并从解析树中提取数据:

String myJsonString = "{\"name\":\"john\",\"lastname\":\"smith\"}"; 
JsonParser parser = new JsonParser(); 
JsonElement element = parser.parse(myJsonString); 
JsonObject jsonObject = element.getAsJsonObject(); 
String lastName = jsonObject.get("lastname").getAsString(); 
System.out.println(lastName); 

这就是说,这是值得商榷的,这是否会节省你在任何实时:

(编辑从下面的评论):

class App { 

    static class Response { 
     String lastname; 
    } 

    public static void main(String[] args) { 
     String myJsonString = "{\"name\":\"john\",\"lastname\":\"smith\"}"; 
     Response r = new Gson().fromJson(myJsonString, Response.class); 
     System.out.println(r.lastname); 
    } 
} 

GSON会悄悄忽略的事实是有一个在JSON更多的数据比你有兴趣,后来就ÿ ou 可能对此感兴趣,在这种情况下,将字段添加到您的Response类中并不重要。

编辑因质疑变化:

你有一个JSON对象。它包含一个字段data,其值是一个对象。里面对象,你有一个字段session_token是你感兴趣的。

要么你必须通过解析树导航到该字段,或者你必须创建Java类都将映射到。 Java类将类似于(在最低限度):

class Response { 
    Data data; 
} 

class Data { 
    String session_token; 
} 
+0

如何检索** lastname密钥**? ** ** r.lastname?我试过了,但它返回* null *。 – Alexandre

+0

请参阅编辑。请注意,您的Java类中的字段名称和JSON中的字段名称必须匹配,除非您使用“@ SerializedName”注释Java类字段以将它们映射到其他位置。在一个真正的应用程序中,你会在返回值的'Response'类中有一个getter。 –

+0

我认为这是因为我的JSON字符串是多维的。我将用这个编辑我的问题。 – Alexandre