С Новым годом! Форум программистов, компьютерный форум, киберфорум
Java EE (J2EE)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/8: Рейтинг темы: голосов - 8, средняя оценка - 4.50
0 / 0 / 0
Регистрация: 10.01.2013
Сообщений: 59

Распарсить json

27.11.2014, 13:14. Показов 1702. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
имееться
Java
1
2
3
4
class Node{
public String name;
public ArrayList<Node>;
}
и json вида
JSON
1
2
3
4
5
6
7
8
{
   {"name":"node"},
   {"name":"node2"},
   {"name":"somenode",children:{
    {"name":"childrenNode1"},
     {"name":"chidlrenNode2"}
}
}
как разпарсить такой json в ArrayList<Node> об'єктов типа Node
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
27.11.2014, 13:14
Ответы с готовыми решениями:

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

Распарсить JSON файл с использованием JOLT
Добрый день, у меня есть проблема со спецификацией для JOLT трансформации для такого JSON файла: { &quot;id&quot; :...

Как распарсить и перевести JSON в XML без научной (экспоненциальной) формы записи чисел?
Привет! Имеется следующая задача/проблема. С сервера получаю ответ в виде JSON'a. С помощью Java необходимо перевести этот JSON в строку,...

7
Эксперт Java
 Аватар для KEKCoGEN
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
27.11.2014, 18:43
https://code.google.com/p/json-io/
0
0 / 0 / 0
Регистрация: 10.01.2013
Сообщений: 59
27.11.2014, 23:08  [ТС]
а можно примерный код пожалуйста?
Ато что то у меня не получаеться

Java
1
Map map = JsonReader.jsonToMaps(json);
вот так получаю все дерево.


Java
1
2
3
4
    public static void parseMap(Map map,ArrayList<TreeNode> nodes){
     // теперь в этой функции надо заполнить масив нодов который мы передаем 
    // но вот я ума не приложу как это сделать
    }
Добавлено через 3 часа 15 минут
теперь пытаюсь решыть проблему по другому

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
import org.codehaus.jackson.JsonParseException;
import org.codehaus.jackson.annotate.JsonManagedReference;
import org.codehaus.jackson.map.JsonMappingException;
import org.codehaus.jackson.map.ObjectMapper;
 
import javax.swing.tree.TreeNode;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.Serializable;
import java.util.*;
 
 
/**
 * Created by Джон on 26.11.2014.
 */
class Tree implements Serializable{
    private ArrayList<Node> nodes;
 
    public Tree() {
    }
 
    public Tree(ArrayList<Node> nodes) {
        this.nodes = nodes;
    }
 
    public ArrayList<Node> getNodes() {
        return nodes;
    }
 
    public void setNodes(ArrayList<Node> nodes) {
        this.nodes = nodes;
    }
}
class Node implements Serializable{
    private String name;
    private ArrayList<Node> children;
 
    public Node() {
    }
 
    public Node(ArrayList<Node> children, String name) {
        this.children = children;
        this.name = name;
    }
 
    public String getName() {
        return name;
    }
 
    public void setName(String name) {
        this.name = name;
    }
 
    public ArrayList<Node> getChildren() {
        return children;
    }
 
    public void setChildren(ArrayList<Node> children) {
        this.children = children;
    }
    @Override
    public String toString(){
        StringBuilder builder = new StringBuilder();
        builder.append("name:"+getName()+",\n");
        builder.append("children:{");
        for(Node nd: children){
            builder.append(nd.toString());
        }
        builder.append("}");
        return builder.toString();
    }
}
 
class Parser{
    public static void parse (ArrayList currentList,ArrayList<Node> treeNodes){
 
    }
}
 
class VisTree {
 
    public static void main(String[] args) {
        try {
            ObjectMapper mapper = new ObjectMapper();
            Tree tree=mapper.readValue(new File("D:\\testTask.json"), Tree.class);
 
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (JsonMappingException e) {
            e.printStackTrace();
        } catch (JsonParseException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
получаю ошыбку
org.codehaus.jackson.map.JsonMappingExce ption: Can not deserialize instance of Tree out of START_ARRAY token
JSON
1
2
3
4
5
6
7
8
{
   {"name":"node"},
   {"name":"node2"},
   {"name":"somenode",children:{
    {"name":"childrenNode1"},
     {"name":"chidlrenNode2"}
}
}
0
Эксперт Java
 Аватар для turbanoff
4094 / 3828 / 745
Регистрация: 18.05.2010
Сообщений: 9,331
Записей в блоге: 12
28.11.2014, 00:21
fakelessjohny, У вас json не валидный.
Если чуть поправить и получить такой
JSON
1
2
3
4
5
6
7
8
9
10
11
[
  {"name": "node"},
  {"name": "node2"},
  {
    "name": "somenode",
    "children": [
      {"name": "childrenNode1"},
      {"name": "chidlrenNode2"}
    ]
  }
]
То с помощью jackson
Java
1
2
3
        InputStream stream = ClassLoader.getSystemResourceAsStream("json.json");
        ObjectMapper mapper = new ObjectMapper();
        Node[] nodes = mapper.readValue(stream, Node[].class);
1
0 / 0 / 0
Регистрация: 10.01.2013
Сообщений: 59
28.11.2014, 19:45  [ТС]
проблему з json поправил ранее, не додумался передавать вторым параметром именно масив.
спасибо
Node[] nodes = mapper.readValue(stream, Node[].class);

Добавлено через 18 часов 8 минут
Возник еще один вопрос, а если заданая структура и не должна быть валидным json
то есть парсить придеться вручную, как лучше это делать?
0
Эксперт Java
 Аватар для turbanoff
4094 / 3828 / 745
Регистрация: 18.05.2010
Сообщений: 9,331
Записей в блоге: 12
28.11.2014, 20:11
Лучший ответ Сообщение было отмечено fakelessjohny как решение

Решение

Тут уж никуда не деться - придется писать свой парсер.
Если структура будет такая простенькая, как вы описываете - лучше написать свой с нуля. Если намного сложнее, то лучше взять какой-нибудь генератор парсеров, например antlr
0
Эксперт Java
 Аватар для KEKCoGEN
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
29.11.2014, 03:48
Цитата Сообщение от fakelessjohny Посмотреть сообщение
Возник еще один вопрос, а если заданая структура и не должна быть валидным json
я бы на вашем месте пересмотрел архитектуру приложения если в нем такое возможно.
0
0 / 0 / 0
Регистрация: 10.01.2013
Сообщений: 59
29.11.2014, 16:45  [ТС]
структура и останеться такой простенькой. вот только не знаю с чего начать писать свой собственный парсер.

Добавлено через 1 час 12 минут
я решыл сперва превратить эту структуру в валидный json
но str.replace("{{","[{").replace("}}","}]") не работает
проблема в том, что между двумя }} могут быть пробелы или знаки \t как заменять в таком случае?

Добавлено через 7 часов 36 минут
проблема решена, все спасибо)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
29.11.2014, 16:45
Помогаю со студенческими работами здесь

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

Конвертер (сериализатор) JSON -> JSON Linked Data
Подскажите, пожалуйста, какую-нибудь хорошую библиотеку на java, которая позволяет конвертировать данные формата JSON в данные в формате...

Распарсить строки с файла в переменние
:wall: Есть файл вида: Name1 43 4 Name2 53 3 Name3 3 2 Name4 63 4 Name5 63 2 Name6 23 4 Необходимо елементами каждой...

Как распарсить данные из первого json-а и перекинуть их в другой json
Добрый день, столкнулся с такой задачей. Есть вот такой json Необходимо извлечь некоторые данные, провести некоторые...

Распарсить с помощью Json.Net приходящий ответ в виде JSON
Нужна помощь с json {&quot;success&quot;:true, &quot;rgInventory&quot;:{ &quot;1025429056&quot;:{ &quot;id&quot;:&quot;1025429056&quot;, &quot;classid&quot;:&quot;310779217&quot;,...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Изучаю 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% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru