Форум программистов, компьютерный форум, киберфорум
Java
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.53/15: Рейтинг темы: голосов - 15, средняя оценка - 4.53
Мастер кустарных методов
 Аватар для LEQADA
232 / 227 / 17
Регистрация: 09.11.2010
Сообщений: 680

И снова Java + JSON

09.08.2014, 12:03. Показов 3072. Ответов 15

Студворк — интернет-сервис помощи студентам
Доброго времени суток. Есть сервер с базой данных и PHP скриптом (API). И есть клиент, написанный на Java. Клиентская часть состоит из следующего: форма авторизации и форма администратора. Если введены правильные имя пользователя и пароль, то сервер должен отправить клиенту несколько таблиц базы данных. А клиент эти таблицы выведет в JFrame. Думаю, что JSON здесь подходит больше всего. Но как именно отправлять? В каком виде отправлять эти таблицы, чтобы было максимально удобно парсить на стороне клиента (Java)? Спасибо за ваше время.
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
09.08.2014, 12:03
Ответы с готовыми решениями:

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

Снова про интерфейсы в Java
Здравствуйте! Начал изучать яву, и, естественно, застопорился на интерфейсах. Долго лазил по разным книгам, форумам, сайтам, нашел кучу...

Снова java.lang.NoClassDefFoundError
Здравствуйте. Я конечно понимаю,что для большинства вопрос будет простейший. И то что аналогичные вопросы задаются раз в неделю,но я...

15
Эксперт Java
 Аватар для KEKCoGEN
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
09.08.2014, 13:35
отправляйте в json вы же сами написали. Берете таблицу и делаете из неё json.
0
Мастер кустарных методов
 Аватар для LEQADA
232 / 227 / 17
Регистрация: 09.11.2010
Сообщений: 680
09.08.2014, 13:48  [ТС]
KEKCoGEN, я вначале думал отправлять, как отдельные JSONфайлы. Но теперь встал вопрос, как их различать. То есть приходит строка в виде [...], [...],...
и как этим дальше работать?
0
Эксперт Java
 Аватар для KEKCoGEN
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
09.08.2014, 16:02
парсить и выводить в таблицу
0
Мастер кустарных методов
 Аватар для LEQADA
232 / 227 / 17
Регистрация: 09.11.2010
Сообщений: 680
10.08.2014, 09:12  [ТС]
JSON выводятся, как одна строка. Заранее неизвестно сколько в таблице строк и количество полей в таблице тоже разное. Как такое парсить? Пожалуйста, приведите пример.
Спасибо большое за ваше время.
0
Эксперт Java
 Аватар для KEKCoGEN
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
10.08.2014, 12:19
Лучший ответ Сообщение было отмечено LEQADA как решение

Решение

Json это не просто строка. Там можно разделять массивы данных. Например у вас есть таблица следующего содержания

ID, Name, Age
------------------
1 Vasya 18
2 Petya 20
==============

Json будет примерно такого типа

JSON
1
2
3
4
5
6
7
8
9
10
11
12
13
14
{
  "data": [
    {
      "ID": "1",
      "Name": "Vasya",
      "Age": 18
    },
    {
      "ID": "2",
      "Name": "Petya",
      "Age": 20
    }
  ]
}
На примающей стороне можно создать класс с такими же полями и парсить в этот класс.
1
Мастер кустарных методов
 Аватар для LEQADA
232 / 227 / 17
Регистрация: 09.11.2010
Сообщений: 680
10.08.2014, 12:20  [ТС]
KEKCoGEN, а если несколько таблиц подряд идут? Как мне на стороне Java понять, что это две разные таблицы, а не одна?
0
Эксперт Java
 Аватар для KEKCoGEN
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
10.08.2014, 12:32
По имени массива. В данном случае таблица называется data. Однако это не совсем хорошо передать несколько таблиц в одном запросе.
1
Мастер кустарных методов
 Аватар для LEQADA
232 / 227 / 17
Регистрация: 09.11.2010
Сообщений: 680
10.08.2014, 12:43  [ТС]
Цитата Сообщение от KEKCoGEN Посмотреть сообщение
Однако это не совсем хорошо передать несколько таблиц в одном запросе.
Как советуете передавать? При успешной авторизации мне нужно будет вывести на экран пару таблиц. А она на сервере.
0
Эксперт Java
 Аватар для KEKCoGEN
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
10.08.2014, 14:19
Вобщем то можно послать два запроса. Потеря в производительности незначительная, зато код будет чище и понятней.
0
 Аватар для lemegeton
4903 / 2696 / 921
Регистрация: 29.11.2010
Сообщений: 5,783
10.08.2014, 18:20
Ну если вы пляшете со стороны клиента на яве, то сделайте сначала DTO, сериализуйте его и посмотрите, в каком виде вам станет удобно его принимать.

Добавлено через 24 минуты
То есть, банально можно проверить:

Кликните здесь для просмотра всего текста

Набор таблиц:
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
package dto;
 
import javax.xml.bind.annotation.*;
import java.util.List;
 
import static java.util.Collections.emptyList;
 
@XmlRootElement(name = "table")
@XmlAccessorType(value = XmlAccessType.NONE)
public class WorkBook {
    @XmlElement(name = "tables")
    @XmlElementWrapper(name = "table")
    private final List<Table> tables;
 
    public WorkBook() {
        tables = emptyList();
    }
 
    public WorkBook(List<Table> tables) {
        this.tables = tables;
    }
 
    public List<Table> getTables() {
        return tables;
    }
 
    @Override
    public String toString() {
        return "WorkBook{" +
                "tables=" + tables +
                '}';
    }
}

Кликните здесь для просмотра всего текста

Таблица:
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
package dto;
 
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import java.util.List;
 
import static java.util.Collections.emptyList;
 
@XmlRootElement(name = "table")
@XmlAccessorType(value = XmlAccessType.NONE)
public class Table {
 
    @XmlElement(name = "data")
    private final List<List<String>> data;
 
    public Table() {
        data = emptyList();
    }
 
    public Table(List<List<String>> data) {
        this.data = data;
    }
 
    public List<List<String>> getData() {
        return data;
    }
 
    @Override
    public String toString() {
        return "Table{" +
                "data=" + data +
                '}';
    }
}


Кликните здесь для просмотра всего текста
Сериализация/десерализация:
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
import com.fasterxml.jackson.databind.ObjectMapper;
import dto.Table;
import dto.WorkBook;
 
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.util.Arrays;
 
public class Tutorial {
    public static void main(String[] args) throws InterruptedException, IOException {
        final ObjectMapper objectMapper = new ObjectMapper();
        final WorkBook workBook = new WorkBook(Arrays.asList(
                        new Table(Arrays.asList(
                                Arrays.asList("id", "name", "age"),
                                Arrays.asList("1", "Vasya", "18"),
                                Arrays.asList("2", "Petya", "19"),
                                Arrays.asList("3", "Kolya", "21")
                        )),
                        new Table(Arrays.asList(
                                Arrays.asList("id", "phone"),
                                Arrays.asList("1", "5555555"),
                                Arrays.asList("2", "1212111"),
                                Arrays.asList("3", "98817"),
                                Arrays.asList("1", "7716727")
                        ))
                    )
                );
 
        final String serialized = objectMapper.writeValueAsString(workBook);
        final WorkBook deSerialized = objectMapper.readValue(new ByteArrayInputStream(serialized.getBytes())
                , WorkBook.class);
 
        System.out.println(serialized);
        System.out.println(deSerialized);
    }
}


На выходе будет
Code
1
2
{"tables":[{"data":[["id","name","age"],["1","Vasya","18"],["2","Petya","19"],["3","Kolya","21"]]},{"data":[["id","phone"],["1","5555555"],["2","1212111"],["3","98817"],["1","7716727"]]}]}
WorkBook{tables=[Table{data=[[id, name, age], [1, Vasya, 18], [2, Petya, 19], [3, Kolya, 21]]}, Table{data=[[id, phone], [1, 5555555], [2, 1212111], [3, 98817], [1, 7716727]]}]}
0
Мастер кустарных методов
 Аватар для LEQADA
232 / 227 / 17
Регистрация: 09.11.2010
Сообщений: 680
11.08.2014, 15:15  [ТС]
lemegeton, я правильно понимаю, что вы предлагаете JSON заменить XML? Если так, то не очень хочется. Я только начал заниматься Java и, думаю, будет неудобно работать с XML.
На сервере переделал немного код. Теперь в начале каждого JSON идёт название таблицы. Думаю теперь запихнуть каждый JSON в ячеки String массива, а потом парсить, как отдельные JSON. Но тут вот какая проблема:
Java
1
2
3
4
5
6
7
8
9
10
BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));
StringBuffer response = new StringBuffer();
int i = 0;
ArrayList<String> arr = new ArrayList<String>();
while ((line = reader.readLine()) != null) {
    response.append(line);
    arr.add(response.toString());
    System.out.println(arr.get(i));
    i++;
}
Этот код делает вывод на экран как-то странно. Во время первого прохода он выводит на экран первое echo php скрипта. Во время второго прохода получается первое echo + второе echo. Как-то так:
qwe
qwerty
qwertyuio
...
Как сделать так, чтобы каждый раз он читал новую строку --- без повторов?

Добавлено через 1 час 0 минут
Есть! Решение последней проблемы подсказали на Stackoverflow.
Java
1
2
3
4
5
6
7
8
9
10
BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));
int i = 0;
ArrayList<String> arr = new ArrayList<String>();
while ((line = reader.readLine()) != null) {
    StringBuffer response = new StringBuffer();
    response.append(line);
    arr.add(response.toString());
    System.out.println(arr.get(i));
    i++;
}
Спасибо большое за уделённое время.
0
Эксперт Java
 Аватар для turbanoff
4094 / 3828 / 745
Регистрация: 18.05.2010
Сообщений: 9,331
Записей в блоге: 12
11.08.2014, 17:34
LEQADA, Какой-то бредовый кусок кода.
Зачем вам вообще StringBuffer там?
2
Мастер кустарных методов
 Аватар для LEQADA
232 / 227 / 17
Регистрация: 09.11.2010
Сообщений: 680
11.08.2014, 21:39  [ТС]
Цитата Сообщение от turbanoff Посмотреть сообщение
Зачем вам вообще StringBuffer там?
к чёрту не нужен. Можно убрать. Спасибо )
0
 Аватар для lemegeton
4903 / 2696 / 921
Регистрация: 29.11.2010
Сообщений: 5,783
12.08.2014, 21:24
Цитата Сообщение от LEQADA Посмотреть сообщение
lemegeton, я правильно понимаю, что вы предлагаете JSON заменить XML?
Вы мой пост читали вообще? Там даже пример выходных данных есть.

Цитата Сообщение от LEQADA Посмотреть сообщение
Теперь в начале каждого JSON идёт название таблицы. Думаю теперь запихнуть каждый JSON в ячеки String массива, а потом парсить, как отдельные JSON.
Не нужно это. В одном джейсоне можно передавать многомерный массив.
1
Мастер кустарных методов
 Аватар для LEQADA
232 / 227 / 17
Регистрация: 09.11.2010
Сообщений: 680
12.08.2014, 21:40  [ТС]
Цитата Сообщение от lemegeton Посмотреть сообщение
Не нужно это. В одном джейсоне можно передавать многомерный массив.
я понял, что можно после того, как спарсил его на Java. Сделал это впервые. Не судите строго. Впервые Java в лицо увидел 2 недели назад.
Цитата Сообщение от lemegeton Посмотреть сообщение
Вы мой пост читали вообще?
Читал. Но не знаю, чем занимаются библиотеки из вашего кода. Решение нашёл. Поэтому гуглить уже не так интересно. ) Но когда-нибудь вернусь к вашему посту и пойму код )
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
12.08.2014, 21:40
Помогаю со студенческими работами здесь

Java, JSON и JSON Simple. Непонятка с созданием объекта JSON на сервере для отправки на фронт
Здравствуйте. Разрабатываю интернет-магазин на Java. Мне нужно на фронте получить список товаров из базы данных для отображения на...

Java, MySql и снова проблема с русскими символами
Возвращаюсь к старой теме. После написания в my.ini default-character-set=win1251 стала работать сортировка при передачи...

И снова JSON
Добрый день. Возникла проблема вопрос: Для парсера JSON использую библиотеку XSuperObject пример текста: {&quot;num&quot;:, ...

Ошибка - Errororg.json.JSONExceprion: Value bd.json of type java.lang.String cannot be converted to JSONObject
Здравствуйте! Есть база данных bd.json, которая находится в проекте в папке assets. Вот содержимое базы данных; { &quot;name&quot;:...

И снова JQuery: получить определенное значение из JSON и вставить на страницу
Добрый вечер(я еще вас не замучил?). И снова обращаюсь к вам за помощью. На сей раз с таким моментом. На сей раз моему работодателю...


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

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Новые блоги и статьи
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло. Но на выплатах по больничным это. . .
Контроль уникальности заводского номера
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере нетипового документа выдачи шин для спецтехники с табличной частью, разработанного в конфигурации КА2. Номеклатура. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru