Отображение ответа JSON в Java POJO Class с использованием GSON - PullRequest
0 голосов
/ 11 октября 2018

Я пытаюсь отобразить ниже JSON в класс POJO, используя библиотеку Gson.Ниже приведен ответ JSON, класс POJO и выполнено сопоставление

import java.util.Map;

import com.google.gson.JsonElement;

public class DataResponse {

    private String $status;
    private Map<String, JsonElement> $payload;

    public String get$status() {
        return $status;
    }

    public void set$status(String $status) {
        this.$status = $status;
    }

    public Map<String, JsonElement> get$payload() {
        return $payload;
    }

    public void set$payload(Map<String, JsonElement> $payload) {
        this.$payload = $payload;
    } 
}

. Вот пример JSON.

{
  "$status": "OK",
  "$payload": {
    "$nextStart": "123",
    "$results": [
      {
        "$key": "101",
        "score": 3,
        "to": "Test1"
      },
      {
        "$key": "102",
        "score": 4,
        "to": "Test2"
      },
    ]
  }
}

Ниже приведено сопоставление.Есть ли какая-то проблема с определением класса POJO.Поскольку я не могу получить все элементы ответа JSON, сопоставленные с самым внутренним элементом ответа.Ценю вашу поддержку в предоставлении полезных предложений.

Gson gson = new Gson();
                        DataResponse dataResponse = gson.fromJson(EntityUtils.toString(response.getEntity()),
                                DataResponse.class);

1 Ответ

0 голосов
/ 11 октября 2018

При работе с маршаллингом и демаршаллингом всегда полезно иметь модель, определенную как:

public class DataResponse {

    private String $status;
    private Payload $payload;
   // getters and setters
}

class Payload {
    private String $nextStart;
    private List<Result> $results;

    // getters and setters
}


class Result {
    private String $key;
    private String score;
    private String to;

    // getters and setters
}

Теперь, когда вы конвертируете json в POJO как:

Gson gson = new Gson(); 
DataResponse dataResponse = gson.fromJson(EntityUtils.toString(response.getEntity()), DataResponse.class);

, это можетлегко конвертировать.

Кроме того, поверьте мне, это хорошо для обработки вашего дальнейшего кода!

Обновление: если вы действительно хотите конвертировать json в Map, то вы можете сделать что-то вроде этого:

import java.lang.reflect.Type;
import com.google.gson.reflect.TypeToken;

Type type = new TypeToken<Map<String, String>>(){}.getType();
Map<String, String> myMap = gson.fromJson("{'key':'value'}", type);

Подставьте туда строку json.

...