将jsonparser代码从json.org库转换为Gson库

时间:2014-06-13 11:49:20

标签: java android json gson

我是Gson库的新手,我正在努力找到一种使用Gson解析非常简单的json数据的合适方法。下面是样本json。

{
"response": {
    "status_code": "200",
    "message": "User successfully registered.",
    "response_for": "register"
}
}

我使用与android捆绑的json.org库解析它如下。

try {
        JSONObject root = new JSONObject(json);
        JSONObject response = root.getJSONObject("response");
        int status = response.getInt("status_code");
    } catch (JSONException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

至于Gson,我遇到的问题是创建POJO类。我只对响应的status_code值感兴趣,所以创建一个pojo类是一种浪费。我试过的样本Gson如下:

JsonObject root = new Gson().fromJson(json, JsonObject.class);
Sring result = jobj.get("test").toString(); 

使用此代码,我只能解析非嵌套的json。

2 个答案:

答案 0 :(得分:2)

  

我只对响应的status_code值感兴趣   创建一个pojo类是一种浪费。

那你为什么要首先使用Gson。

引用gson docs"它可用于将JSON字符串转换为等效的Java对象"

要获得status_code你的第一个方法应该有效。

使用Gson

public class Response { 

Res response;
}

然后有

public class Res {

public String status_code;
public String message;
public String response_for;

public Res(){}
}

然后

InputStreamReader isr = new InputStreamReader (is);
Gson gson = new Gson();
Response lis = new Gson().fromJson(isr, Response.class);
Log.i("Response is  ",""+lis.response.status_code);
Log.i("Message is ",""+lis.response.message);
Log.i("Response_for is ",""+lis.response.response_for);

日志

06-13 17:55:52.126: I/Response is(8776): 200
06-13 17:55:52.126: I/Message is(8776): User successfully registered.
06-13 17:55:52.126: I/Response_for is(8776): register

答案 1 :(得分:-1)

以下代码返回字符串值。

 "status_code": "200",
"message": "User successfully registered.",
"response_for": "register"

你得到的是整数,我想你必须这样写,

 JSONObject root = new JSONObject(json);
 JSONObject response = root.getJSONObject("response");
 int status = Integer.parseInt(response.getString("status_code"));

请试试这个,可能会有用。