Форум программистов, компьютерный форум, киберфорум
Java
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.78/9: Рейтинг темы: голосов - 9, средняя оценка - 4.78
0 / 0 / 0
Регистрация: 01.06.2020
Сообщений: 30
1

Парсинг Java

04.01.2021, 01:46. Просмотров 1766. Ответов 4
Метки нет (Все метки)

День добрый, начал изучать Java пару дней назад, попробовать сделать погодного бота для Телеграм, появилась проблема с тем, чтобы парсить JSON строку, приходящую со стороннего сайта(не совсем понимаю, как поступить с квадратными скобками для weather, обозначающими массив). После парсинга все поля полученного объекта равны null.
Использую gson 2.8.1 и Intellij Idea


JSON.java (описание класса для расшифровки)
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
package JSONdecode;
 
public class JSON
{
    public coord Coord;
    public weather Weather[];
    public String Base;
    public main Main;
    public long Visibility;
    public wind Wind;
    public clouds Clouds;
    public long Dt;
    public sys Sys;
    public int Timezone;
    public long Id;
    public String Name;
    public int Cod;
}
Bot.java
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
import org.telegram.telegrambots.bots.TelegramLongPollingBot;
import org.telegram.telegrambots.meta.api.methods.send.SendMessage;
import org.telegram.telegrambots.meta.api.objects.Update;
import org.telegram.telegrambots.meta.exceptions.TelegramApiException;
 
import java.io.IOException;
import java.io.InputStream;
import java.net.MalformedURLException;
import java.net.URLConnection;
import java.net.URL;
import java.net.HttpURLConnection;
import java.util.Scanner;
 
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import JSONdecode.JSON;
 
 
public class Bot extends TelegramLongPollingBot
{
    @Override
    public void onUpdateReceived(Update update)
    {
        update.getUpdateId();
 
        SendMessage sendMessage = new SendMessage().setChatId(update.getMessage().getChatId());
 
        if (update.getMessage().getText().equals("as"))
        {
            String GOT = getWeather();
            sendMessage.setText(GOT);
            try
            {
                execute(sendMessage);
            }
            catch (TelegramApiException e)
            {
                e.printStackTrace();
            }
        }
    }
 
    @Override
    public String getBotUsername()
    {
        return "weather_test228_bot";
    }
 
    @Override
    public String getBotToken()
    {
        return "1461054874:AAEOtBLWMx9OQbBH75nG7iFFSJ9sD-giSCk";
    }
 
    public String getWeather()
    {
        String outPut = null;
        try
        {
            HttpURLConnection conTar = (HttpURLConnection) new URL("http://api.openweathermap.org/data/2.5/weather?q=London,uk&APPID=06d0d10ec4b1f25282e0ea1f8788bcb2").openConnection();
            conTar.connect();
            Scanner rec = new Scanner(conTar.getInputStream());
            outPut = rec.nextLine();
            conTar.disconnect();
        }
        catch (IOException e)
        {
            e.printStackTrace();
        }
 
        System.out.println(outPut);
 
        JSON outJSON = testJSON(outPut);
        String decOut = "";
 
        decOut = decOut + "Город: ";
        decOut = decOut + outJSON.Name;
 
        return decOut;
    }
 
 
    public JSON getJSON(String receivedJSON)
    {
//        String taboo = "]";
//        for (byte i = 0; i < taboo.length(); i++)
//        {
//            receivedJSON = receivedJSON.replaceAll(taboo, "");
//        }
//        System.out.println("Чистый:");
//        System.out.println(receivedJSON);
        Gson g = new Gson();
        JSON decodedJSON = g.fromJson(receivedJSON, JSON.class);
        return decodedJSON;
    }
 
    public JSON testJSON(String receivedJSON)
    {
        Gson g = new Gson();
        String buff = "{\"coord\":{\"lon\":-0.13,\"lat\":51.51},\"weather\":[{\"id\":802,\"main\":\"Clouds\",\"description\":\"scattered clouds\",\"icon\":\"03n\"}],\"base\":\"stations\",\"main\":{\"temp\":277.25,\"feels_like\":273.24,\"temp_min\":276.48,\"temp_max\":278.15,\"pressure\":1018,\"humidity\":80},\"visibility\":10000,\"wind\":{\"speed\":3.1,\"deg\":60},\"clouds\":{\"all\":40},\"dt\":1609699944,\"sys\":{\"type\":1,\"id\":1414,\"country\":\"GB\",\"sunrise\":1609661148,\"sunset\":1609689839},\"timezone\":0,\"id\":2643743,\"name\":\"London\",\"cod\":200}";
        JSON decodedJSON = g.fromJson(receivedJSON, JSON.class);
        System.out.println(decodedJSON.Name);
        return decodedJSON;
    }
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.01.2021, 01:46
Ответы с готовыми решениями:

Парсинг JSON в JSON Linked Data с использованием Hydra Java
Есть веб страница, на которой пользователь заполняет поля, жмет на кнопку и затем данные...

Какую версию Java поддерживает .Net Java# И какую VS6.0 Java++ ?
Какую версию Java поддерживает .Net Java# И какую VS6.0 Java++ ? Ответье, плиз, новичку, по MSDN...

Парсинг пакета на java
Господа, подскажите, как это правильно делать в Java? Допустим я получаю по сети пакет...

Парсинг XML в java
Помогите с программой пожалуйста (хотя бы задайте верное направление) Имеется xml документ, там...

4
Модератор
1425 / 425 / 140
Регистрация: 11.08.2017
Сообщений: 1,449
04.01.2021, 11:44 2
M4RKER, Во первых у вас беда с названиями классов и объектов, а так же переменных, не всех но в глаза бросается.
Во вторых для десериализации надо называть не классы а объекты (поля) как в json, например вместо public weather Weather[]; правильно будет private Weather weather[]; + гетер/сетер
И третье вместо Gson g = new Gson(); вот так Gson gson = new GsonBuilder().create();
1
2888 / 2464 / 761
Регистрация: 05.07.2013
Сообщений: 11,923
04.01.2021, 12:52 3
private Weather[] weather, а лучше лист
1
0 / 0 / 0
Регистрация: 01.06.2020
Сообщений: 30
05.01.2021, 01:55  [ТС] 4
Цитата Сообщение от alecss131 Посмотреть сообщение
Во вторых для десериализации надо называть не классы а объекты (поля) как в json, например вместо public weather Weather[]; правильно будет private Weather weather[]; + гетер/сетер
Можете пояснить этот момент более подробно?
Спасибо большое

Добавлено через 19 минут
P.S. с доступом с гетер/сетер понятно, но почему вы указываете именно такой порядок "private Weather weather[]", IDE сразу пишет про неразрешимые символы
0
2888 / 2464 / 761
Регистрация: 05.07.2013
Сообщений: 11,923
05.01.2021, 08:23 5
M4RKER, гугли java naming convention
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.01.2021, 08:23

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Авторизация на сайте, Java парсинг
Задача парсить один сайт(не с интернета, наш корпоративный, к сожалению к базе не имею доступа,...

Помогите реализовать парсинг сайта на Java
Здравствуйте уважаемые форумчане, возникла такая ситуация, есть пост запрос следующего содержания:...

Некорректный парсинг XML файла JAVA
Добрый день, столкнулся с такой проблемой. При парсинге файла столкнулся с такой проблемой, если...

DBF, DBASE, JAVA, парсинг, конвертирование, работа, редактирование
добрый день. Решил написать программу, которая будет конвертировать обычный текстовый документ в...

Парсинг StAX в Java, узнать что содержит конкретный тег
Доброго времени суток, можно у вас набраться немножко мудрости про парсинг xml, как узнать что...

Парсинг файлов CSV в Java (запятые в заключенном в кавычках тексте)
В файле CSV содержатся следующие столбцы:...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.