0

我正在通过 PHP 从 MySql DB 获取信息。信息在以下 JSON 数组中返回:

06-15 15:20:17.400: E/JSON(9865): {"tag":"get_game_state","success":1,"error":0,"GameState":{"monster":"Troll","qty":"1","exp":"0"}}

解析 json 并使用StringBuilder. 现在我已经返回了信息,我想解析它包含的单个字符串/整数,以将它们放入本地 sqlite 数据库中。

这是有问题的两行

            userFunctions.getServerGameState(email, monster, qty, exp); //this line gets the JSON array and the above information is returned
            db.saveLocalGameSate(monster, qty, exp); //this line should take that information take String monster int exp and int qty and put them in the local db. 

我应该如何将返回的信息转换为单独的字符串和整数,以便它们可以在下一行代码中使用?对某些资源的任何指导都会非常有帮助。

更新

我在上面两行代码之间添加了以下行,输出是空指针异常

            try {
            JSONArray arr = new JSONArray(GameState);
            JSONObject jObj = arr.getJSONObject(0);
            String virtumon = jObj.getString("monster");
            Integer qty = jObj.getInt("qty");
            Integer exp = jObj.getInt("exp");

        } catch (JSONException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
4

1 回答 1

1

这实际上不是 JSON 数组;它是一个 JSON 对象(因为大括号而不是方括号。)

JSONObject() 的构造函数之一接受包含 JSON 的字符串,并将解析它并创建一个 JSON 对象。我还不能发布链接,但可以在 d.android.com 上查看 JSONObject 文档。

一旦你有了一个 JSONObject,你就可以使用 getString()、getInt()、optString() 和 optInt() 来提取你需要的数据。


假设 'responseString' 是完整的响应字符串:

try {
  JSONObject responseObj = new JSONObject(responseString);
  JSONObject gameStateObj = responseObj.getJSONObject("GameState");
  String monsterType = gameStateObj.getString("monster");
  int qty = Integer.parseInt(gameStateObj.getString("qty"));
  int exp = Integer.parseInt(gameStateObj.getString("exp");
} catch (JSONException ex) {
  e.printStackTrace();
}

“qty”和“exp”是你的json中的字符串,所以你需要getString然后转换为int。我认为这段代码是正确的;没有测试过。

于 2012-06-15T13:52:25.133 回答