Лек формат на данни

Както е известно, JSON е по-лек формат за данни от XML и е по-предпочитан за използване. Но когато прехвърляте големи масиви от обекти с една и съща структура, JSON също е претоварен с данни. Например:

[
    {
        name: 'John',
        surname: 'Smith',
        info: { age: 25, comments: '' }
    },
    {
        name: 'Sam',
        surname: 'Black',
        info: { age: 27, comments: '' }
    },
    {
        name: 'Tom',
        surname: 'Lewis',
        info: { age: 21, comments: '' }
    }
]

name, surname, age и comments тройната декларация е безполезна, ако точно знам, че всеки обект от масив има една и съща структура.
Има ли някакъв формат на данни, който може да минимизира такива данни от масив и да бъде достатъчно гъвкав?


person Sergey Metlov    schedule 03.08.2011    source източник
comment
Не предоставихте никакво обяснение защо това е претоварено или неподходящо във вашия случай на употреба. Ако сте загрижени за размера на данните, помислете за компресиране -- освен това при HTTP обикновено получавате компресия безплатно. Синтаксисът на JSON обикновено се компресира, за да стане несъществен.   -  person pawstrong    schedule 05.09.2011


Отговори (2)


Вярно е, че това е хакерско решение, но ние го използвахме и работи. Можете да изравните всичко в масиви. Например горното ще бъде представено като:

[
    ['John','Smith',[24,'']],
    ['Sam','Black',[27,'']],
    ['Tom','Lewis',[21,'']]
]

Недостатъкът е, че при сериализиране/десериализиране трябва да направите някаква персонализирана логика. Това обаче води до допълнителни спестявания за текстово базирано решение и Рей е прав -- ако наистина искате максимални спестявания, двоичният е правилният начин.

person incaren    schedule 03.08.2011
comment
Ако всеки елемент има абсолютно същия формат, винаги има CSV с първия ред, съхраняващ схемата! - person Ray Toal; 03.08.2011

Е, ако имате текстови формати, YAML се опитва да има минимално маркиране. До голяма степен се отървава от точката и запетаята и скобите. Но текстът се компресира доста добре.

Но ако искате да премахнете излишъците в имената на свойствата, трябва да използвате двоичен формат. Потърсете MessagePack, Protocol Buffers или Avro. Не знам за текстови формати, които премахват този вид излишък.

КЪСНО ДОБАВЯНЕ:

О, боже, след като използвах Hadoop за обработка на десетки гигабайти наведнъж през изминалата година, как можах да забравя CSV? Боже. Първият ред може да бъде схемата и наистина нямате нужда от кавички. А разделителят може да зависи от вас. Нещо като това:

name|surname|infoage|infocomments
John|Smith|24|
Sam|Black|27|Hi this is a comment
Tom|Lewis|21|This comment has an \| escaped pipe

За малки документи може да е по-малък от някои двоични формати, но двоичният е добър за съхраняване на реални числа.

Освен това CSV наистина е добър само когато имате колекция от елементи, които са еднакви. За йерархии на сложни обекти използвайте бинарно, YAML или базирано на масив решение на @incaren.

person Ray Toal    schedule 03.08.2011