Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
Senum
3 / 2 / 1
Регистрация: 02.05.2014
Сообщений: 92
#1

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

04.06.2017, 22:06. Просмотров 304. Ответов 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.

Что я сделал не так?
http://www.cyberforum.ru/android-dev/thread1696392.html
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.06.2017, 22:06
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Не выходит парсинг Json (Программирование Android):

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

Парсинг JSON
Дали задание Мне надо воссоздать структуру JSON в сообственных объектах. Т.е....

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

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

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

11
cyb0rg_01
Фрилансер
438 / 338 / 95
Регистрация: 05.05.2014
Сообщений: 2,308
05.06.2017, 09:55 #2
Цитата Сообщение от 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
demixdn
285 / 232 / 69
Регистрация: 31.10.2016
Сообщений: 557
05.06.2017, 11:56 #3
Вот так парсится указанная вами сторка.
Цитата Сообщение от 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
cyb0rg_01
Фрилансер
438 / 338 / 95
Регистрация: 05.05.2014
Сообщений: 2,308
05.06.2017, 12:30 #4
Цитата Сообщение от demixdn Посмотреть сообщение
ваш ответ как минимум изыбточен
Для маленьких проектов возможно. В реальных условиях по-другому (всмысле все в кучу, без какого либо намека на архитектуру и устранение сильной связности) пишут только новички
0
Senum
3 / 2 / 1
Регистрация: 02.05.2014
Сообщений: 92
05.06.2017, 12:37  [ТС] #5
Дико извиняюсь не тот Json.

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

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

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

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

Не по теме:

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

0
cyb0rg_01
Фрилансер
438 / 338 / 95
Регистрация: 05.05.2014
Сообщений: 2,308
05.06.2017, 13:04 #7
Лучший ответ Сообщение было отмечено 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
demixdn
285 / 232 / 69
Регистрация: 31.10.2016
Сообщений: 557
05.06.2017, 13:39 #8
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
Pablito
2652 / 2134 / 727
Регистрация: 12.05.2014
Сообщений: 7,447
Завершенные тесты: 1
05.06.2017, 14:09 #9
Цитата Сообщение от cyb0rg_01 Посмотреть сообщение
эту сторону "услышал"
ну каждый слышит то, что ожидает

мой ответ был на вот это
Цитата Сообщение от cyb0rg_01 Посмотреть сообщение
В реальных условиях по-другому (всмысле все в кучу, без какого либо намека на архитектуру и устранение сильной связности) пишут только новички
просто другое мнение, убеждать даже и не собирался
0
cyb0rg_01
Фрилансер
438 / 338 / 95
Регистрация: 05.05.2014
Сообщений: 2,308
05.06.2017, 14:48 #10
Цитата Сообщение от Pablito Посмотреть сообщение
есть мнение что на "устранении сильной связанности" сильно заморочены 18-ти летные синьеры
остальные же пилят код и как-то живут без DI
(я именно про DI, а не про архитектуру)
Такое мнение встречаю впервые. В чем минус DI?
0
Pablito
2652 / 2134 / 727
Регистрация: 12.05.2014
Сообщений: 7,447
Завершенные тесты: 1
05.06.2017, 14:53 #11
так я и не говорил про минусы
но если лично мое мнение, то минус в том, что тупо на ровном месте код усложняется в разы, а профита от этого никакого вообще, кроме гипотетического - мы устранили сильную связанность
1
cyb0rg_01
Фрилансер
438 / 338 / 95
Регистрация: 05.05.2014
Сообщений: 2,308
05.06.2017, 15:40 #12
Pablito, Демонстрационные примеры все гипотетические, для DI в том числе.

Цитата Сообщение от Pablito Посмотреть сообщение
а профита от этого никакого вообще, кроме гипотетического - мы устранили сильную связанность
В реальных проектах гипотетическое тоже возможно.
Особенно в тех в которых логика может в один день измениться DI может очень пригодится. Речь идет даже не о больших проектах. Например окажется что считать зарплату нужно по-другому: тут два варианта переписывать написанный метод в готовом сервисе или реализовать другой сервис в котором этот метод будет переопределен, но интерфейс при этом сохранится. А может оказаться, что для некоторых сотрудников нужно считать так, а для других по-другому. Даже если приложение вместе с сервером будут 5-10 тысяч строк кода, имхо заказчик может многое захотеть поменять, перекрутить перевертеть и прочее, всех предпочтений не учтешь. Усложнения в таких проектах практически незаметны и занимают ~5% от всего кода (навскидку).
0
05.06.2017, 15:40
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.06.2017, 15:40
Привет! Вот еще темы с решениями:

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

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

Json http парсинг. Массивы
Здравствуйте. Нужно спарсить json данные. Есть php файл, который генерирует...

Парсинг JSON ответа от сервера
Здравствуйте друзья, давно не заходил к вам в гости. Столкнулся с таким...


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

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

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