Форум программистов, компьютерный форум, киберфорум
Java: Сети
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 11.10.2015
Сообщений: 3

JSON simple - выборка вложенной структуры

11.03.2016, 09:12. Показов 1122. Ответов 0
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, решил попробовать разобраться в json, погуглив, наткнулся на совет использовать JSON.simple от Yidong Fang. Для набивания руки мною был выбран ресурс с его API я могу получить json исходник страницы без конвертации(я точно не разбираюсь, но вроде в другом случаи мне бы пришлось делать это "руками").
Ссылка для проверки работоспособности в коде
Пример: ссылка/res/659397.html -> ссылка/res/659397.json (res/659397. - грубо говоря номер отдельной темы).
Собственно, сам вопрос. Страница имеет сложную, вложенную структуру и я никак не могу получить определенные данные из ключа.

Кликните здесь для просмотра всего текста
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
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.nio.charset.Charset;
//import java.util.Iterator;
//import java.util.Map;
 
//import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;
import org.json.simple.parser.ParseException;
 
public class JsonMain {
 
    public static void main(String[] args) throws IOException {
 
        String sURL = "https://2ch.hk/pr/res/659397.json";
        URL url = new URL(sURL);
        HttpURLConnection request;
        JSONParser jsonParser = new JSONParser();
        JSONObject jsonObject;
 
        
        try {
            request = (HttpURLConnection) url.openConnection();
            request.connect();
//          Получаю весь json код.
            jsonObject = (JSONObject) jsonParser
                    .parse(new InputStreamReader((InputStream) request.getContent(), Charset.forName("UTF-8")));
            
            System.out.println(jsonObject.toString());
            System.out.println(jsonObject.keySet()); 
            System.out.println(jsonObject.get("BoardName"));
 
        } catch (ParseException e) {
            e.printStackTrace();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (NullPointerException e) {
            e.printStackTrace();
        }
 
    }
 
}

Еще ссылка на код, на всякий случай. http://ideone.com/vDYPsL

Интересующий сегмент Json-структуры. Так как на самой странице она в одну строку.
Кликните здесь для просмотра всего текста

JSON
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
...
 "threads": [
    {
      "posts": [
        {
          "banned": 0,
          "closed": 0,
          "comment": "тут комментарий",
          "date": "19/02/16 Птн 13:57:43",
          "email": "",
          "files": [
            {
              "duration": "",
              "height": 1200,
              "md5": "8bba2c15619d29feb7f4c29d4b56d501",
              "name": "14558794639400.jpg",
              "nsfw": 0,
              "path": "src/659397/14558794639400.jpg",
              "size": 331,
              "thumbnail": "thumb/659397/14558794639400s.jpg",
              "tn_height": 250,
              "tn_width": 188,
              "type": 1,
              "width": 903
            }
          ],
          "hidden_num": "659397",
          "lasthit": 1456742755,
          "name": "Аноним",
          "num": 659397,
          "number": 1,
          "op": 0,
          "parent": "0",
          "sticky": 0,
          "subject": "Официальный™ тред Java #23",
          "tags": "",
          "timestamp": 1455879463,
          "trip": ""
        }, 
...
     ]
    }
...


Каким образом возможно вытащить скажем "path" - путь к прикрепленному файлу ?
У меня был вариант сохранить все в строку и достать нужную мне информацию с помощью регулярных выражений, но думаю что есть более "изящный" путь.

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

Если нужно, могу прикрепить саму библиотеку JSON-simple, полный вариант форматированой json структуры, и пр.


Буду благодарен за любую информацию, может на аналогичном примере, ибо покопался в гугле и ничего толком не смог выудить. В конечном итоге хотелось бы реализовать что-то типа грабера-картинок.(Доделал аналогичный с помощью jsoup)
Советы приветствуются.

Добавлено через 9 минут
В итоге я таки получаю весь json со страницы, но вывести могу только ключ:значение, которое находится сверху, как я понимаю.

Добавлено через 2 часа 9 минут
Попытался создать еще один JSONobject и присвоить ему выбранный блок.

Java
1
2
3
JSONObject jsonThreads;
jsonThreads = (JSONObject) jsonObject.get("threads");
System.out.println(jsonThreads);
На что получаю следующие исключение, почему так ?
Кликните здесь для просмотра всего текста

Exception in thread "main" java.lang.ClassCastException: org.json.simple.JSONArray cannot be cast to org.json.simple.JSONObject
at JsonMain.main(JsonMain.java:34)
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
11.03.2016, 09:12
Ответы с готовыми решениями:

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

Выборка данных из вложенной коллекции
Всем привет! Как составить вложенные linq запросы? class Country { public string Name {get; set;} public...

Инициализация вложенной структуры
Здравствуйте! Имеется структура, хранящая 2 вложенные структуры: typedef struct{ struct str1{ int a; int b; int c; ...

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
11.03.2016, 09:12
Помогаю со студенческими работами здесь

JSON.simple Java
Всем привет. Вот разбираюсь с json и столкнулся с проблемой перебора, опять же, ранее использовал json в as3 и php, но в jave всё совсем не...

Передача вложенной структуры в функцию
Добрый вечер!интересует вопрос,есть Массив структур,который содержит в себе еще несколько массивов структур! struct _name{ char...

Final для вложенной структуры
class A{ class B {..} final; }; так класс B теперь входит в размер A, но не инициализируется. это баг? потому что я нигде не нашел...

Способ передачи вложенной структуры JNI
Создана простая демо структура. файл RECT.java public class RECT { long left; long right; long top; long...

Заполнить массив указателей вложенной структуры
Есть две структуры для двоичного дерева поиска typedef struct _price { double price; char* shopname; } pricing; typedef...


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

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru