#java #android #json #gson
#java #Android #json #gson
Вопрос:
Я новичок в библиотеке Gson, и я изо всех сил пытаюсь найти подходящий способ анализа очень простых данных json с использованием Gson. Вот пример json.
{
"response": {
"status_code": "200",
"message": "User successfully registered.",
"response_for": "register"
}
}
Я разбираю его следующим образом, используя json.org библиотека в комплекте с Android.
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.
Комментарии:
1. используйте объект JSONArray для анализа вложенного json mkyong.com/java/json-simple-example-read-and-write-json
2. @KamleshArya но в моем примере json нет jsonarray, так что я должен это делать??
3. В вашей ссылке используются классы org.json, а не классы gson. Мне нужно изменить свой код синтаксического анализа на gson
4. структура
JsonObject.class
is зависит от типа получаемого ответа. если ответ содержит вложенный объект, вам придется создать класс с дочерним объектом. для получения более подробной информации см. Это5. @maddy Я знаю, что и я пытаюсь этого избежать
Ответ №1:
Меня интересует только значение status_code ответа, поэтому создание класса pojo — пустая трата времени.
Тогда зачем вам вообще нужно использовать Gson.
Цитирование документов gson «Его можно использовать для преобразования строки 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. Я буду использовать классы POJO для Gson для другого сложного объекта json. Это пример, показывающий, что аутентификация прошла успешно, и мой проект нуждается в большом разборе json. Должен ли я создавать классы pojo для такого простого json, тогда я мог бы использовать свой первый метод для таких случаев. Но я не уверен, что только начал использовать Gson.
2. @IllegalArgument используйте первый метод. Но если вам нужны объекты java, используйте gson.
3. это работает, но я искал решение без использования классов pojo и использования json. Мне нужно разобрать гораздо больше json, чем это, и количество моих классов уже составляет 100 lol. Я думаю, я буду использовать два синтаксических анализатора json gson и json.org это был мой наихудший сценарий развития событий.
4. @IllegalArgument для вашего случая, поскольку вам нужен только код состояния. 1-й метод в порядке. Но вы должны решить, нужны ли вам объекты Java или нет. Не имеет значения, нужно ли вам анализировать небольшое количество или больше
5. @IllegalArgument сколько действий у вас есть? Если у вас их больше 30 или 50, значит, с вашим дизайном что-то не так
Ответ №2:
следующий код возвращает строковое значение.
"status_code": "200",
"message": "User successfully registered.",
"response_for": "register"
и вы получаете его с помощью integer, я думаю, вам нужно написать так,
JSONObject root = new JSONObject(json);
JSONObject response = root.getJSONObject("response");
int status = Integer.parseInt(response.getString("status_code"));
пожалуйста, попробуйте это, может быть, это сработает.
Комментарии:
1. Это код, который я опубликовал в самом вопросе. Пожалуйста, внимательно прочитайте.
2. пожалуйста, прочитайте правильно мой код, я отредактировал эту строку: int status = Integer.parseInt(response.getString(«status_code»));
3. сначала в коде я получаю значение из ответа в строке и преобразую эту строку в целое число
4. Я знаю, и это бесполезный код. Какой смысл преобразовывать 200, которые могут быть непосредственно извлечены как целое число, в строку и обратно в целое число??
5. если вы получите это значение с целым числом, появится ошибка синтаксического анализа.