Разобрать строку данных YouTube в объект Video - PullRequest
1 голос
/ 30 апреля 2020

URL-адрес данных, которые я использую: https://www.googleapis.com/youtube/v3/videos?part=snippet%2Cstatistics&chart=mostPopular&maxResults=50&regionCode=AU&videoCategoryId=15&key= {YOUR_API_KEY}

В настоящее время я занимаюсь разработкой этого приложения командной строки Intelli J Java, которое может определять тенденции YouTube. Однако мне нужна помощь в написании некоторого кода при попытке проанализировать строку данных YouTube в объект Video. Вот некоторый код, который я сделал, но не уверен, имеет ли право выполнять синтаксический анализ строки данных YouTube:

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import javax.json.Json;
import javax.json.JsonArray;
import javax.json.JsonObject;
import javax.json.JsonReader;

public class YouTubeTrender {

    public static void test1() throws FileNotFoundException {

        System.out.println("Performing Test 1");
        String filename = "data/youtubedata_15_50.json";
        int expectedSize = 50;

        System.out.println("Testing the file: " + filename);
        System.out.println("Expecting size of: " + expectedSize);

        // Read data
        JsonReader jsonReader = Json.createReader(new FileInputStream(filename));
        JsonObject jobj = jsonReader.readObject();

        // read the values of the item field
        JsonArray items = jobj.getJsonArray("items");

        System.out.println("Size of input: " + items.size());
        System.out.println("Sucess: " + (expectedSize == items.size()));


    }

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) throws FileNotFoundException {
        System.out.println("YouTube Trender Application");

        test1();

    }
}

Я должен упомянуть, прежде чем забыть здесь код о том, как работает JsonReader, JsonObject, Json .createReader, readObject, JsonArray, getJsonArray, json в вышеприведенном разделе импорта - это красный текст в виде ошибки, и некоторые из них требуют от меня создания класса.

1 Ответ

0 голосов
/ 30 апреля 2020

Вы можете перевести JSON String в класс, используя библиотеку по имени Джексон. Прежде всего, вы должны импортировать эту библиотеку. Если вы используете Maven, вы можете добавить:

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.9.8</version>
</dependency>

Затем вы должны создать свой класс Video, который будет хранить данные. Джексон отображает каждый ключ строки JSON в поле класса с тем же именем. Например:

{
    "hello": "hi",
    "name": "alex"
}

Тогда, если вы сопоставите это JSON с классом с именем Greeting:

public class Greeeting {
    private String hello;
    private String name;

    // The class must have getters and setters
    public String getHello() {
        return this.hello;
    }

    public String getName() {
        return this.name;
    }

    public void setHello(String hello) {
        this.hello = hello;
    }

    public void setName(String name) {
        this.name = name;
    }
}

Если вы сопоставите строку с Greeting.class, экземпляр Greeting будет создан содержащий hi в hello поле и alex в name поле.

Для этого сопоставления вы можете сделать:

public Greeting parseGreeting(String json) {
    ObjectMapper mapper = new ObjectMapper();
    return mapper.readValue(json, Greeting.class);
}

Вместо строки вы также можете передайте файл в качестве первого параметра.

Теперь вам нужно реализовать Video.class в зависимости от того, какие поля у вас JSON есть.

...