Чтение массива json из объекта json с помощью gson - PullRequest
0 голосов
/ 05 мая 2020

Я хочу получить список JSON объектов с JSON из API. Например, affiliate.itunes, но с gson я не могу go выбросить jsonObject, и мне нужно использовать java JSONObject и класс JSONArray для этого материала. Можно ли полностью справиться с этим с помощью gson lib?

Это json файл, который я скопировал в свою android необработанную папку enter image description here

и это это мой код

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        GsonBuilder builder = new GsonBuilder();
        Gson gson = builder.create();

        InputStream inputStream = getResources().openRawResource(R.raw.file);
        String jsonStr = streamToString(inputStream);

        try {
            JSONObject jsonObject = new JSONObject(jsonStr);
            JSONArray jsonArray = jsonObject.getJSONArray("results");
            Type type = new TypeToken<List<BandJsonResult>>(){}.getType();
            List<BandJsonResult> jsonResults = gson.fromJson(jsonArray.toString(),type);

            for(int i = 0 ; i < jsonResults.size() ; i++){
                Log.e("JSON " + i ,jsonResults.get(i).toString());
            }
        } catch (JSONException e) {
            e.printStackTrace();
        }

    }
    private String streamToString(InputStream stream) {

        InputStreamReader reader = new InputStreamReader(stream);
        BufferedReader bufferedReader = new BufferedReader(reader);
        StringBuilder result = new StringBuilder();
        String line = "";
        try {
            while ((line = bufferedReader.readLine()) != null) {
                result.append(line);
            }
        }catch (IOException ex){
            ex.printStackTrace();
        }
        return result.toString();
    }
}

1 Ответ

0 голосов
/ 20 мая 2020

Gson по умолчанию использует отражение для (де-) сериализации классов (если вы не предоставляете пользовательские адаптеры), см. Также этот пример в руководстве пользователя Gson. На основе снимка экрана вы можете добавить эти два класса:

// You can give these classes any name
class ApiResponse {
    // Uses the field names for (de-)serialization by default, but you can also
    // specify custom names using @SerializedName
    private int resultCount;
    private List<BandResult> results;
}
class BandResult {
    // You can also use enums and then either name the enum constants the same
    // as the values, or annotate the enum constants with @SerializedName
    private String wrapperType;
    private String kind;
    private int artistId;
    ...
}

А затем использовать их при вызове Gson.fromJson:

ApiResponse apiResponse = gson.fromJson(jsonStr, ApiResponse.class);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...