Конвертировать JSON в класс Java с помощью GSON - PullRequest
0 голосов
/ 25 октября 2019

Я пытаюсь преобразовать следующие данные API в класс Java. Я особенно заинтересован в выборе поля timeSeriesDaily с ключом даты и полем закрытия. Я попытался использовать следующие структуры данных для захвата соответствующих полей

public class AlphavantageData {
    List<Map<String,TimeSeriesDaily>> timeSeriesDaily;

    public List<Map<String, TimeSeriesDaily>> getTimeSeriesDaily() {
        return timeSeriesDaily;
    }

    public void setTimeSeriesDaily(List<Map<String, TimeSeriesDaily>> timeSeriesDaily) {
        this.timeSeriesDaily = timeSeriesDaily;
    }


}

public class TimeSeriesDaily {

    private Map<String,DayCloseStockPrice> dayStockPriceRecords;

    public Map<String, DayCloseStockPrice> getDayStockPriceRecords() {
        return dayStockPriceRecords;
    }

    public void setDayStockPriceRecords(Map<String, DayCloseStockPrice> dayStockPriceRecords) {
        this.dayStockPriceRecords = dayStockPriceRecords;
    }

}

public class DayCloseStockPrice {
    private String closingStockPrice;

    public String getClosingStockPrice() {
        return closingStockPrice;
    }

    public void setClosingStockPrice(String closingStockPrice) {
        this.closingStockPrice = closingStockPrice;
    }

}

Однако я продолжаю получать следующую ошибку GSON:

java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING at line 10 column 10 path $.timeSeriesDaily[0]

Буду признателен, если кто-нибудь ответит, почему это не так. не работает и как это исправить.

Спасибо.

PS: Это образец текста JSON.

 {
    "Meta Data": {
        "1. Information": "Daily Time Series with Splits and Dividend Events",
        "2. Symbol": "MSFT",
        "3. Last Refreshed": "2019-10-24",
        "4. Output Size": "Compact",
        "5. Time Zone": "US/Eastern"
    },
    "timeSeriesDaily": [
        "2019-10-24": {
            "1. open": "139.3900",
            "2. high": "140.4100",
            "3. low": "138.6700",
            "closingStockPrice": "139.9400",
            "5. adjusted close": "139.9400",
            "6. volume": "34434281",
            "7. dividend amount": "0.0000",
            "8. split coefficient": "1.0000"
        },

Ответы [ 2 ]

0 голосов
/ 25 октября 2019

Ваша структура json неверна, однако я попробовал следующий json с вашими классами, и он сработал

{
    "Meta Data": {
        "1. Information": "Daily Time Series with Splits and Dividend Events",
        "2. Symbol": "MSFT",
        "3. Last Refreshed": "2019-10-24",
        "4. Output Size": "Compact",
        "5. Time Zone": "US/Eastern"
    },
    "timeSeriesDaily": [
        {
            "2019-10-24": {
                "1. open": "139.3900",
                "2. high": "140.4100",
                "3. low": "138.6700",
                "closingStockPrice": "139.9400",
                "5. adjusted close": "139.9400",
                "6. volume": "34434281",
                "7. dividend amount": "0.0000",
                "8. split coefficient": "1.0000"
            }
        }
    ]
}
0 голосов
/ 25 октября 2019

Убедитесь, что объект json правильно отформатирован и совместим с вашим POJO. Позже вы можете использовать приведенный ниже код для выполнения различных типов преобразования -

 Gson gson = new Gson();
// 1. JSON file to Java object
Staff staff = gson.fromJson(new FileReader("C:\\projects\\test.json"), Test.class);

// 2. JSON string to Java object
String json = "{'name' : 'test'}";
Staff staff = gson.fromJson(json, Test.class);

// 3. JSON file to JsonElement ->  String
JsonElement json = gson.fromJson(new FileReader("C:\\projects\\test.json"), JsonElement.class);
String result = gson.toJson(json);

Зависимость Maven -

<dependency>
    <groupId>com.google.code.gson</groupId>
    <artifactId>gson</artifactId>
    <version>x.x.x</version>
</dependency>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...