С Новым годом! Форум программистов, компьютерный форум, киберфорум
Программирование Android
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.88/8: Рейтинг темы: голосов - 8, средняя оценка - 4.88
3 / 2 / 1
Регистрация: 02.05.2014
Сообщений: 92

Не выходит парсинг Json

04.06.2017, 22:06. Показов 1642. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
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
@Override
protected void onPostExecute(String strJson) {
    super.onPostExecute(strJson);
    // выводим целиком полученную json-строку
    Log.d(LOG_TAG, strJson);
 
    JSONObject dataJsonObj = null;
    String temps = "";
 
    try {
        dataJsonObj = new JSONObject(strJson);
        JSONArray opa = dataJsonObj.getJSONArray("opa");
 
        JSONObject secondFriend = opa.getJSONObject(0);
        temps = secondFriend.getString("temps");
        Log.d(LOG_TAG, "Второе имя: " + temps);
 
        for (int i = 0; i < opa.length(); i++) {
            JSONObject friendsJSONObject = opa.getJSONObject(i);
 
            JSONObject temp = friendsJSONObject.getJSONObject("temp");
 
            String TempeOut = temp.getString("HumOut");
 
            String HumOut = temp.getString("TempeOut");
            tempInHouse.setText(TempeOut);
 
            Log.d(LOG_TAG, "HumOut: " + TempeOut);
            Log.d(LOG_TAG, "TempeOut: " + HumOut);
        }
 
    } catch (JSONException e) {
        e.printStackTrace();
    }
}
 
 
@Override
protected void onPostExecute(String strJson) {
    super.onPostExecute(strJson);
    // выводим целиком полученную json-строку
    Log.d(LOG_TAG, strJson);
 
    JSONObject dataJsonObj = null;
    String temps = "";
 
    try {
        dataJsonObj = new JSONObject(strJson);
        JSONArray opa = dataJsonObj.getJSONArray("opa");
 
        JSONObject secondFriend = opa.getJSONObject(0);
        temps = secondFriend.getString("temps");
        Log.d(LOG_TAG, "Второе имя: " + temps);
 
        for (int i = 0; i < opa.length(); i++) {
            JSONObject friendsJSONObject = opa.getJSONObject(i);
 
            JSONObject temp = friendsJSONObject.getJSONObject("temp");
 
            String TempeOut = temp.getString("HumOut");
 
            String HumOut = temp.getString("TempeOut");
            tempInHouse.setText(TempeOut);
 
            Log.d(LOG_TAG, "HumOut: " + TempeOut);
            Log.d(LOG_TAG, "TempeOut: " + HumOut);
        }
 
    } catch (JSONException e) {
        e.printStackTrace();
    }
}

Структура : JSON

temp
HumOut : "10"
TempeOut : "21"
StrJson содержит всю строку - {"temp":{"HumOut":"10","TempeOut":"21 "}}

Нужно вывести в лог или на экран значение HumOut и TempeOut.

Что я сделал не так?
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
04.06.2017, 22:06
Ответы с готовыми решениями:

Парсинг JSON'а
Здравствуйте! Недавно я на php+msql и Eclipse пробовал этот пример с сайта...

Парсинг Json
Здравствуйте подcкажите как сделать: нужно данные из Json засунуть в массив, чтобы его дальше передавать по активностям. Json парсится в...

Парсинг JSON
Привет знатокам своего дела, у меня уже крик души! Какой час не выходит распарсить такой JSON ...

11
Фрилансер
735 / 352 / 96
Регистрация: 05.05.2014
Сообщений: 2,621
05.06.2017, 09:55
Цитата Сообщение от Senum Посмотреть сообщение
{"HumOut":"10","TempeOut":"21"}
почему не camelCase?

на GSON можно так, можно еще Dagger'ом сконфигурировать зависимости:
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
106
107
108
109
110
111
112
113
114
115
116
//Task
 
    class GetObjectDTOAsyncTask extends AsyncTask<Void, Void, ObjectDTO> {
        @Override
        protected ObjectDTO doInBackground(Void... params) {
            ObjectDTO objectDTO = serverAPI.getObjectDTO();
        }
        protected void onPostExecute(ObjectDTO objectDTO) {
            if(objectDTO != null){
 
            }
            else{
            
            }
        }
    }
 
//DTO
 
public class TempPartDTO{
    private Integer HumOut; //nullable
    private Integer TempeOut; //nullable
 
    public Integer getHumOut(){
        return HumOut;
    }
    public void setHumOut(HumOut){
        this.HumOut = HumOut;
    }
 
    public Integer getTempeOut(){
        return TempeOut;
    }
    public void setTempeOut(Integer TempeOut){
        this.TempeOut = TempeOut;
    }
}
 
public class ObjectDTO{
    private TempPartDTO temp;
 
    public TempPartDTO getTemp(){
        return temp;
    }
    public void setTemp(TempPartDTO temp){
        this.temp = temp;
    }
}
 
//http utility
 
public interface IHttpRequestUtility {
    String getJson();
}
 
public class HttpRequestUtility implements IHttpRequestUtility {
    private int readTimeOut = 10000;
    private int connectTimeout = 10000;
 
    @Override
    public String getJson(String queryURL) throws IOException {
        HttpURLConnection urlConnection = null;
        BufferedReader reader = null;
 
        URL url = new URL(queryURL);
        urlConnection = (HttpURLConnection) url.openConnection();
        urlConnection.setRequestMethod("GET");
        urlConnection.setReadTimeout(readTimeOut);
        urlConnection.setConnectTimeout(connectTimeout);
        urlConnection.connect();
 
        InputStream inputStream = urlConnection.getInputStream();
        StringBuffer buffer = new StringBuffer();
 
        reader = new BufferedReader(new InputStreamReader(inputStream));
 
        String line;
        while ((line = reader.readLine()) != null) {
            buffer.append(line);
        }
        urlConnection.disconnect();
 
        return buffer.toString();
    }
}
 
//ServerAPI
 
public interface IServerAPI {
    ObjectDTO getObjectDTO();
}
 
public class ServerAPI implements IServerAPI {
    private String url;
    private HttpRequestUtility requestUtility;
 
    public UserService(String url, IHttpRequestUtility requestUtility) {
        this.url = url;
        this.requestUtility = requestUtility;
    }
 
    @Override
    public ObjectDTO getObjectDTO() {
        Gson gson = new Gson();
        String methodURL = "/MethodURL";
        try {
            String json = requestUtility.getJson(url+methodURL);
            ObjectDTO objectDTO = gson.fromJson(json, ObjectDTO.class);
            return objectDTO;
        }
        catch(IOException e){
            //your handling exception
        }
        return null;
    }
}
0
314 / 257 / 81
Регистрация: 31.10.2016
Сообщений: 619
05.06.2017, 11:56
Вот так парсится указанная вами сторка.
Цитата Сообщение от Senum Посмотреть сообщение
StrJson содержит всю строку - {"temp":{"HumOut":"10","TempeOut":"21 "}}
Java
1
2
3
4
5
6
7
8
JSONObject jsonObject =  new JSONObject(StrJson);
JSONObject temp = jsonObject.getJSONObject("temp");
 
String TempeOut = temp.getString("TempeOut");//<--тут был неверный ключ
String HumOut = temp.getString("HumOut"); //<--тут был неверный ключ
 
Log.d(LOG_TAG, "HumOut: " + TempeOut);
Log.d(LOG_TAG, "TempeOut: " + HumOut);
Ваш код делает что-то с массивами, но ваша исходная строка не содержит массивов, если вы ее правильно описали.

Добавлено через 6 минут

Не по теме:

cyb0rg_01, ваш ответ как минимум изыбточен. человек попросил подсказать с парсингом, а вы предложили воспользоваться Gson (что в принципе уже ответ), но еще и даггером. И дали кучу кода, который к делу не имеет отношения.

2
Фрилансер
735 / 352 / 96
Регистрация: 05.05.2014
Сообщений: 2,621
05.06.2017, 12:30
Цитата Сообщение от demixdn Посмотреть сообщение
ваш ответ как минимум изыбточен
Для маленьких проектов возможно. В реальных условиях по-другому (всмысле все в кучу, без какого либо намека на архитектуру и устранение сильной связности) пишут только новички
0
3 / 2 / 1
Регистрация: 02.05.2014
Сообщений: 92
05.06.2017, 12:37  [ТС]
Дико извиняюсь не тот Json.

я не могу разбить его и вывести в 4 текст бокса, смог только взять 2 объекта и все.

вот тот фрагмент {"opa": [{"temp2": {"TempeIn": "21", "HumIn": "32"}, "temp": {"HumOut": "10", "TempeOut": "21"}}]}

Добавлено через 1 минуту
Цитата Сообщение от cyb0rg_01 Посмотреть сообщение
почему не camelCase?
на GSON можно так, можно еще Dagger'ом сконфигурировать зависимости:
К сожалению уже начал делать так и то столкнулся с большим количеством проблем, боюсь если буду делать по другому будет только хуже.

п.с. спасибо за помощь
0
05.06.2017, 12:47

Не по теме:

есть мнение что на "устранении сильной связанности" сильно заморочены 18-ти летные синьеры
остальные же пилят код и как-то живут без DI
(я именно про DI, а не про архитектуру)

0
Фрилансер
735 / 352 / 96
Регистрация: 05.05.2014
Сообщений: 2,621
05.06.2017, 13:04
Лучший ответ Сообщение было отмечено Senum как решение

Решение

Senum,

возьмете пример кода выше и измените классы DTO. Ну или проще, а то уже начинается :

Java
1
2
String json = /*your json string*/; //{"opa": [{"temp2": {"TempeIn": "21", "HumIn": "32"}, "temp": {"HumOut": "10", "TempeOut": "21"}}]}
ObjectDTO objectDTO = gson.fromJson(json, ObjectDTO.class);
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
public class TempPartDTO{
    private Integer HumOut; //nullable
    private Integer TempeOut; //nullable
 
 
    public Integer getHumOut(){
        return HumOut;
    }
    public void setHumOut(HumOut){
        this.HumOut = HumOut;
    }
 
    public Integer getTempeOut(){
        return TempeOut;
    }
    public void setTempeOut(Integer TempeOut){
        this.TempeOut = TempeOut;
    }
}
public class TempPart2DTO{
    private Integer HumIn; //nullable
    private Integer TempeIn; //nullable
 
 
    public Integer getHumIn(){
        return HumIn;
    }
    public void setHumIn(HumIn){
        this.HumIn = HumIn;
    }
 
    public Integer getTempeIn(){
        return TempeIn;
    }
    public void setTempeIn(Integer TempeIn){
        this.TempeIn = TempeIn;
    }
}
 
public class TempDTO{
    public TempPartDTO temp;
    public TempPart2DTO temp2;
 
    public Integer getTempPartDTO(){
        return HumIn;
    }
    public void setTempPartDTO(temp){
        this.temp = temp;
    }
    public Integer getTempPartDTO(){
        return temp;
    }
 
    public void setTempPart2DTO(temp2){
        this.temp2 = temp2;
    }
    public Integer getTempPart2DTO(){
        return temp2;
    }
}
 
public class ObjectDTO{
    private ArrayList<TempDTO> temps;
   
    public ArrayList<TempDTO> getTemps(){
        return temp;
    }
    public void setTemp(ArrayList<TempDTO> temps){
        this.temps = temps;
    }
}
Цитата Сообщение от Pablito Посмотреть сообщение
остальные же пилят код и как-то живут без DI
Пилите дальше. Опять же кому как. Если бизнес логика никогда меняться не будет, то зачем DI? Или если этой логики вообще нет, то тем более. Пока только от вас нигатив в эту сторону "услышал", что не убеждает.
1
314 / 257 / 81
Регистрация: 31.10.2016
Сообщений: 619
05.06.2017, 13:39
Senum, чуть усложню ответ
Создаем класс Temp.java, в который на вход принимает JSONObject.
Кликните здесь для просмотра всего текста

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
public class Temp {
    private int tempIn;
    private int tempOut;
    private int humIn;
    private int humOut;
 
    public Temp(@NonNull JSONObject jsonObject) {
        /* {"temp2": {"TempeIn": "21", "HumIn": "32"}, "temp": {"HumOut": "10", "TempeOut": "21"}} */
 
        JSONObject inputObject = jsonObject.optJSONObject("temp2");
        tempIn = inputObject.optInt("TempeIn");
        humIn = inputObject.optInt("HumIn");
 
        JSONObject outputObject = jsonObject.optJSONObject("temp");
        tempOut = outputObject.optInt("TempeOut");
        humOut = outputObject.optInt("HumOut");
    }
 
    public int getTempIn() {
        return tempIn;
    }
 
    public int getTempOut() {
        return tempOut;
    }
 
    public int getHumIn() {
        return humIn;
    }
 
    public int getHumOut() {
        return humOut;
    }
}

А сам массив в каком нибудь методе парсим так
Java
1
2
3
4
5
6
7
8
9
Temp[] temp;
JSONObject rootObject = new JSONObject(JSON_STRING);
JSONArray opaArray = rootObject.optJSONArray("opa");
int arrayLength = opaArray.length();
temp = new Temp[arrayLength];
for (int i = 0; i < arrayLength; i++) {
    JSONObject jsonObject = opaArray.getJSONObject(i);
    temp[i] = new Temp(jsonObject);
}
0
2884 / 2296 / 769
Регистрация: 12.05.2014
Сообщений: 7,978
05.06.2017, 14:09
Цитата Сообщение от cyb0rg_01 Посмотреть сообщение
эту сторону "услышал"
ну каждый слышит то, что ожидает

мой ответ был на вот это
Цитата Сообщение от cyb0rg_01 Посмотреть сообщение
В реальных условиях по-другому (всмысле все в кучу, без какого либо намека на архитектуру и устранение сильной связности) пишут только новички
просто другое мнение, убеждать даже и не собирался
0
Фрилансер
735 / 352 / 96
Регистрация: 05.05.2014
Сообщений: 2,621
05.06.2017, 14:48
Цитата Сообщение от Pablito Посмотреть сообщение
есть мнение что на "устранении сильной связанности" сильно заморочены 18-ти летные синьеры
остальные же пилят код и как-то живут без DI
(я именно про DI, а не про архитектуру)
Такое мнение встречаю впервые. В чем минус DI?
0
2884 / 2296 / 769
Регистрация: 12.05.2014
Сообщений: 7,978
05.06.2017, 14:53
так я и не говорил про минусы
но если лично мое мнение, то минус в том, что тупо на ровном месте код усложняется в разы, а профита от этого никакого вообще, кроме гипотетического - мы устранили сильную связанность
1
Фрилансер
735 / 352 / 96
Регистрация: 05.05.2014
Сообщений: 2,621
05.06.2017, 15:40
Pablito, Демонстрационные примеры все гипотетические, для DI в том числе.

Цитата Сообщение от Pablito Посмотреть сообщение
а профита от этого никакого вообще, кроме гипотетического - мы устранили сильную связанность
В реальных проектах гипотетическое тоже возможно.
Особенно в тех в которых логика может в один день измениться DI может очень пригодится. Речь идет даже не о больших проектах. Например окажется что считать зарплату нужно по-другому: тут два варианта переписывать написанный метод в готовом сервисе или реализовать другой сервис в котором этот метод будет переопределен, но интерфейс при этом сохранится. А может оказаться, что для некоторых сотрудников нужно считать так, а для других по-другому. Даже если приложение вместе с сервером будут 5-10 тысяч строк кода, имхо заказчик может многое захотеть поменять, перекрутить перевертеть и прочее, всех предпочтений не учтешь. Усложнения в таких проектах практически незаметны и занимают ~5% от всего кода (навскидку).
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
05.06.2017, 15:40
Помогаю со студенческими работами здесь

Парсинг json
Здравствуйте! Имеется такой json код: { &quot;data&quot;: }И я его обрабатываю так: JSONArray urls = json.getJSONArray(&quot;data&quot;); ...

Парсинг JSON
Доброй ночи! Есть задача распарсить JSON не зная изначально сколько и чего там находится, а так же не зная ни имен ни другой инфы, кроме...

Парсинг JSON
Дали задание Мне надо воссоздать структуру JSON в сообственных объектах. Т.е. парсить надо не в String (например), а сделать вот что: -...

Парсинг JSON объекта
Здравствуйте, программисты! Помогите, пожалуйста, с решением задачи: Есть json-объект такого вида: {&quot;map&quot;:...

Парсинг JSON-файла
Есть файл со следующим содержимым: т.е. только со значениями! Как его распарсить?? Этот способ не работает: void...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru