Преобразование кода jsonparser из json.org библиотека в библиотеку Gson

#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. если вы получите это значение с целым числом, появится ошибка синтаксического анализа.