LINUX.ORG.RU

JSON или XML для древовидных структур данных?


0

1

Пусть есть некая древовидная структура.
Например так, в виде JS-объекта:

{key1 : "value1",
 key2 : "value2",
 ...,
 childs : [ {key1 : "value12",
                  key2 : "value22",
                  ...,
                  childs [ {...} ]}
                {key1 : "value13",
                 key2 : "value23",
                 ...,
                 childs [ {...} ]} ]}
Что предпочтительнее для хранения такой структуры (скажем максимально где-то порядка до 5000 узлов и до 200 уровней вложенности), JSON или XML, с учетом использования javascript (node.js) для обработки.

1. С точки зрения удобства работы. 2. С точки зрения скорости обработки.

Операции - изменение полей существующих и добавление новых элементов на любой уровень.

★★★

Последнее исправление: unikoid (всего исправлений: 1)

>1. С точки зрения удобства работы.

JSON, с ним в js работать удобнее.

2. С точки зрения скорости обработки.

JSON, не надо парсить xml.

anonymous
()

XML это всё-таки MarkupLanguage. Основное предназначение - разметка. Т.е. если тебе нужен текст с вкраплениями данных, или, на худой конец, сильно структурированный текст на неструктурированном языке - XML правильно. В противном случае это OneSizeFitsAll решение, которое может быть правильно в случае, если думать совсем не хочется, или не можется, или XML написан во внешних требованиях — во всех случаях ты вряд ли задавал бы этот вопрос.

DonkeyHot ★★★★★
()
Ответ на: комментарий от anonymous

Ты его по сети гоняешь? Тогда gzip в помощь, жмется он идеально. А пара байт на многогигабайтном диске - это да, решает, прям конец света.

PayableOnDeath
()
Ответ на: комментарий от anonymous

А в JSON'е избыточных запятых нет, ага. И как лапша он не выглядит, достаточно посмотреть пример ТСа.

Deleted
()
Ответ на: комментарий от Deleted

>А в JSON'е избыточных запятых нет, ага.

По сравнению с xml?

И как лапша он не выглядит, достаточно посмотреть пример ТСа.

Ну так xml тоже выглядит как лапша, если его не печатать с форматированием. Это же возможно и для json-а.

anonymous
()
Ответ на: комментарий от PayableOnDeath

> Тогда gzip в помощь, жмется он идеально.

Это как раз и есть показатель сильной избыточности.

anonymous
()
Ответ на: комментарий от DonkeyHot

> Основное предназначение - разметка.

Меня всегда мучал вопрос - если требуется писать имя закрывающегося тега полностью - то почему не разрешить поддержку перекрывающихся тэгов?

Без поддержки перекрывающихся тэгов проще писать в TeX-style:

\hello{body}

<hello>body</hello>

Короче ровно на «/hello>» + понятнее.

anonymous
()
Ответ на: комментарий от anonymous

>По сравнению с xml?

Вообще.

Ну так xml тоже выглядит как лапша, если его не печатать с форматированием. Это же возможно и для json-а.


Вот только во всех этих знаках препинания и порядке {}[] очень легко ошибиться, если руками придётся залезать. На больших размерах эта штука ещё менее читабельна, чем XML. Хотя, возможно, ТСу это не нужно.

Deleted
()
Ответ на: комментарий от Deleted

> Вот только во всех этих знаках препинания и порядке {}[] очень легко ошибиться, если руками придётся залезать.

Ты педали в машине не путаешь? Или буквы на клавиатуре?

На больших размерах эта штука ещё менее читабельна, чем XML.

<sentence><to>Вам</to> <prep>для</prep> <verb>восприятия</verb></sentence> обязательно нужно видеть кучу дублирующегося мусора? Так воспринимать проще?

anonymous
()
Ответ на: комментарий от anonymous

><sentence><to>Вам</to> <prep>для</prep> <verb>восприятия</verb></sentence>

Однако если надо передавать какие-нибудь дополнительные данные, кроме имени поля, можно сделать <to var1=«1»>Вам</to> и даже <to var1.. var5=«5» value=«Вам» />

А в случае с JSON это превращается во вложенные структуры, либо в дополнительные записи вида {«to-var1» : 1}.

От задачи зависит же.

anonymous
()
Ответ на: комментарий от anonymous

>Ты педали в машине не путаешь? Или буквы на клавиатуре?

Совсем глупый да? Проблема не в неправильном нажатии, а в том, как ты всё это отследишь.

обязательно нужно видеть кучу дублирующегося мусора? Так воспринимать проще?


А вкладывать внутрь ты как предлагаешь? Пробелами? Или тебя скобочки убивают?

Deleted
()

>1. С точки зрения удобства работы.

Что XML, что JSON — деревья. У JSON, семантика посложнее. Мифическое удобство работы зависит от языка. Позволяет язык удобно работать с деревьями — можешь одинаково просто работать и с XML, и с JSON.

2. С точки зрения скорости обработки.


Ну, ты спросил. Кто же знает-то? Допустим у XML'а парсер однозначно проще, если без валидации ессно. Зато, и результирующая модель проще, а это значит что не всегда может подойти твоей предметной области, и тебе придется ее преобразовывать туда-обратно, а это память (мусор) и те же вычислительные мощности. А если с валидацией, то ты часть черной работы можешь переложить на парсер, но это медленнее. Если этого не делать, то проверять на правильность JSON несколько удобнее и эффективнее из-за более сложной семантики, но для этого понадобится столько бойлерплейт-кода.

ЗЫ: Всем XML ненавистникам предлагаю читать ASN.1, до наступления просветления.

Macil ★★★★★
()
Ответ на: комментарий от Deleted

> >Ты педали в машине не путаешь? Или буквы на клавиатуре?

Совсем глупый да? Проблема не в неправильном нажатии, а в том, как ты всё это отследишь.

Как ты отслеживаешь неправильное нажатие педалей в машине?

Твой пост напоминает дурака со стеклянным х№;м (поссал - и об стол).

anonymous
()

Всегда и везде JSON. Если нужно Human readable - YAML. От XML отказывайся везде, где только можно. Если размеры уж очень велики и даже gzip не спасает - BSON.

tia
()
Ответ на: комментарий от ky-san

Почитай содержимое первого сообщения в треде. Речь идёт о древовидных структурах, а не структурах разметки текста.
В контексте темы данного треда, я говорю: «Всегда и везде JSON», что есть «во всех технологиях и инструментах, где нужно хранить, передавать или обрабатывать древовидные, векторные, ассоциативные структуры(список не полон), используй JSON».
Так понятнее?
Я это к чему, нормальный человек поймёт о чём говорит другой, если мозг человека поддерживает функцию «контекст разговора». Люди, чей мозг не поддерживает эту функцию - как ie6. С ними противно вести дела, общаться.

Не будь таким.

tia
()
Ответ на: комментарий от tia

> Так понятнее?

Да.

Я это к чему, нормальный человек поймёт о чём говорит другой, если <это не лор, где тема меняется несколько раз на одной странице обсуждения>

Fxd

ky-san
()
Ответ на: комментарий от anonymous

>> \hello{body}

<hello>body</hello>

Короче ровно на «/hello>» + понятнее.


Пиши <hello t=«body» />

KRoN73 ★★★★★
()
Ответ на: комментарий от anonymous

>От задачи зависит же.

Именно так.

Опять же, валидировать XML много проще.

KRoN73 ★★★★★
()
Ответ на: комментарий от ky-san

Ты за мной следишь? :3

Ну и, как говорится, Welcome to Internet where men are men, women are men, and children are FBI agents. Ну или нечто в этом духе (^. ^)

Deleted
()
Ответ на: комментарий от Deleted

Ууу, как всё запущенно. Всё серъёзней, чем я думал ;)

ky-san
()
Ответ на: комментарий от tia

> «Всегда и везде JSON», что есть «во всех технологиях и инструментах, где нужно хранить, передавать или обрабатывать древовидные, векторные, ассоциативные структуры(список не полон), используй JSON».

Tia, только представь себе лисповский код в ясоне!

dave ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.