JSON, odnosno JavaScript Object Notation, je tekstualno baziran otvoreni standard dizajniran za razumljivu ljudima razmenu podataka. Ona je izvedena iz Javaskript jezika za predstavljanje jednostavnih struktura podataka i asocijativni niz, nazvan objektima. Uprkos vezi sa JavaSkriptom, to je jezički nezavistan, za mnoge jezike.

JSON format je prvobitno napravio Daglas Krokford, a opisan je u RFC 4627. Званична врста интернет медија за ЈСОН је application/json. Екстензија ЈСОН фајлова је .json.

ЈСОН формат се често користи за серијализацију и пренос структурираних података преко мрежне везе. Пре свега се користи за размену података између сервера и веб апликације, као замена за XМЛ.

Историја

уреди

Даглас Крокфорд је први популаризовао ЈСОН формат.[1]

ЈСОН је коришћен у Стате Софтwаре Инц., компанији чији је сувласник Крокфорд, почев од априла 2001., и финансиран до стране Тесла Вентурес. Када се шест бивших радника Цоммунитиес.цом-а основали Стате Софтwаре Инц. почетком 2001., они су се сложили да направе систем који ће имати стандардне претраживачке способности и који ће обезбедити апстрактни ниво за веб програмере да створе веб апликације које би имале сталну дуплу конекцију на веб серверу држећи две хттп конекције отворене и рециклирајући их пре стандардног тајм-аут претраживача ако се подаци више не размењују. Идеју за Стате Апплицатион Фрамеwорк је развио Чип Морнингстар из Стате Софтwаре Инц.[2][3] Коришћен је у пројектима Цоммунитиес.цом за Цартоон Нетwорк, који је користио плуг-ин са власничким форматом размењивања порука због манипулације ДХТМЛ елементима (овај систем је такође у власништву 3ДО). Након открића раних АЈАX способности, дигиГроупс, Ноосх, и других коришћених оквира за прослеђивање информација у поља у корисничким претраживачима без освежавања веб апликације, реализујући у стварном времену богате веб апликације користећи једино стандарде ХТТП, ХТМЛ и ЈаваСкрипт могућности Нетсцапе 4.0.5+ и ИЕ 5+. Даглас Крокфорд је тада открио да ЈаваСкрипт може бити коришћен као објектно заснован формат за такав систем. Систем је продат Сун Мицросyстемс-у, Амазон.цом-у и ЕДС-у. ЈСОН.орг Веб сајт је покренут 2002. У децембру 2005, Yахоо! је почео да нуди нешто од веб сервис ЈСОН-у.[4] Гоогле је почео да нуди ЈСОН-у новости заГДата веб протокол у децембру 2006.[5]

Иако је ЈСОН првобитно заснован на не-стриктном подскупу јаваскрипт језика за скриптовање (конкретно, стандард ЕЦМА-262 треће издање-децембар 1999.[6]) а најчешће је коришћен са тим језиком, то је језичка независност формат. Код за рашчлањивање и генерисање ЈСОН података је лако доступан за велики број програмских језика. ЈСОН веб сајт пружа свеобухватни списак постојећих ЈСОН библиотека, организованих језицима.

Типови података, синтакса и пример

уреди

Типови Јава Сцрипт података су:

Безначајне белине се могу слободно додати између структуралних карактера (заграда "{ } [ ]", две тачке ":" и зареза ",").

Следећи пример показује ЈСОН репрезентацију објекта који описује особу. Објекат има поља име и презиме представљена помоћу ниске, број за годину, објекат који приказује адресу те особе и низ објеката са бројевима телефона.

{
    "firstName": "John",
    "lastName": "Smith",
    "age": 25,
    "address": {
        "streetAddress": "21 2nd Street",
        "city": "New York",
        "state": "NY",
        "postalCode": 10021
    },
    "phoneNumbers": [
        {
            "type": "home",
            "number": "212 555-1234"
        },
        {
            "type": "fax",
            "number": "646 555-4567"
        }
    ]
}

Једна потенцијална замка за слободну природу ЈСОН-а долази од могућности писања бројева као нумеричких литерала или ниске под наводницима. На пример поштански код почиње са нулама (на пример 011 за Београд). Ако један програмер пише под наводницима а други не, водећа нула се може изгубити приликом размене та 2 система, када се тражи у оквиру истог система или приликом штампања.Осим тога поштански кодови нису у свим земљама бројеви, неке користе слова. Ово је тип проблема када се коришћење ЈСОН шеме (види доле) треба умањити.

Од када је ЈСОН практично подскуп ЈаваСцрипт-а, могуће је, али се не препоручује,[7] парсирање ЈСОН текста у објекат позивањем ЈаваСцрипт-ове функције eval(). На пример, ако је више ЈСОН података садржано у ЈаваСцрипт стринг променљивој contact, може се направити ЈаваСцрипт објекат p на следећи начин:

 var p = eval("(" + contact + ")");

Променљива contact мора се налазити у заградама да би се избегла двосмисленост синтаксе ЈаваСцрипт-а[8].

Preporučeni nacin je da se koristi JSON parser. Ukoliko klijent apsolutno veruje izvoru teksta ili mora parsirati i prihvatiti tekst koji nije striktno JSON kompatibilan, treba izbegavati eval().  Korektno implementirani JSON parser prihvata jedino validan JSON, sprečavajući potencijalno zlonameran kod od izvrsavanja nehotice.
 var p = JSON.parse(contact);

Шема

уреди

ЈСОН Шема[9] је спецификација за формате засноване на ЈСОН-у за дефинисање структуре ЈСОН података. ЈСОН схема пруза гаранције за ста су ЈСОН подаци потребни у датој апликацији и како се могу мењати. ЈСОН схема има за циљ да обезбеди валидацију, документацију и контролу интеракције са ЈСОН подацима. ЈСОН схема је базирана на концептима XМЛ Сцхема, РелаxНГ, анд Кwалифy, али је намењена да се базира на ЈСОН-у, како би се ЈСОН подаци у форми схеме могли користити за валидацију ЈСОН података, исти алати за серијализацију/десеријализацију се могу користити за шему и податке и то може бити самоописујуће. ЈСОН шема је написана као Интернет нацрт , тренутна верзија 4[10]. Тренутно на располагању постоји неколико валидатора за различите програмске језике,[11] сваки са различитим нивоом прилагођавања. Пример ЈСОН шеме:

{
    "name": "Product",
    "properties": {
        "id": {
            "type": "number",
            "description": "Product identifier",
            "required": true
        },
        "name": {
            "type": "string",
            "description": "Name of the product",
            "required": true
        },
        "price": {
            "type": "number",
            "minimum": 0,
            "required": true
        },
        "tags": {
            "type": "array",
            "items": {
                "type": "string"
            }
        },
        "stock": {
            "type": "object",
            "properties": {
                "warehouse": {
                    "type": "number"
                },
                "retail": {
                    "type": "number"
                }
            }
        }
    }
}

ЈСОН шема изнад се може користити за тестирање валидности следећег ЈСОН кода:

{
    "id": 1,
    "name": "Foo",
    "price": 123,
    "tags": [ "Bar", "Eek" ],
    "stock": {
        "warehouse": 300,
        "retail": 20
    }
}

Миме верзија

уреди

Официјелна МИМЕ верзија за ЈСОН текст је "aplikacija/json".[12]

ЈСОН-РПЦ

уреди

ЈСОН-РПЦ је РПЦ протокол изграђен на ЈСОН, као замена за XМЛ-РПЦ или СОАП. То је једноставан протокол који дефинише неколицину процеса и команди. ЈСОН-РПЦ допушта нотификације (информација послата до сервера која не обавезује одговор) и за многоструке позиве да се пошаљу до сервера који це моћи да узврати одговором на захтев.

--> {"jsonrpc": "2.0", "method": "subtract", "params": [42, 23], "id": 1}
<-- {"jsonrpc": "2.0", "result": 19, "id": 1}

Употреба у Ајаx-у

уреди

ЈСОН-РПЦ је обично коришћен у Ајаx техникама. Ајаx је термин за могућност да веб страна захтева да нови податак, пошто буде учитан у интернет прегледач, обично за одговор на корисничке активности на приказаној веб страни. Као део Ајаx модела, нови податак је обично легализован у корисничком систему приказан динамично и тако иде назад до сервера. Један пример овога у пракси може бити тај да док корисник куца у претраживачу, клијентов део кода шаље оно што је откуцано до тад до сервера који одговара са комплетном листом термина из њихове базе података. Ово може бити приказано у падајућој листи у претрази, тако да корисник може зауставити куцање и селектовати комплетну и обичну претрагу повезану директно. Када је ово било у оригиналу описано у мид-200с, Ајаx је обично искористио XМЛ као податак вишеструког формата, али многи програмери су такође користили ЈСОН да повежу Ајаx-ове податке са сервером и клијентом.[13]

Пратећи Јава скрипт код је један пример клијента који коришћењем XМЛХттпРеqуест захтева податак у ЈСОН формату од сервера. (Серверов део програмирања је изостављен, мора бити подешен да одговори на захтев на url са ЈСОН-овим форматираном ниском.)

var my_JSON_object = {};
var http_request = new XMLHttpRequest();
http_request.open("GET", url, true);
http_request.onreadystatechange = function () {
    var done = 4, ok = 200;
    if (http_request.readyState == done && http_request.status == ok) {
        my_JSON_object = JSON.parse(http_request.responseText);
    }
};
http_request.send(null);

Безбедносна питања

уреди

Иако је ЈСОН намењен као податак серијализованог формата, његов дизајн као не-строг подскуп ЈаваСкрипт језика поседује неколико безбедносних проблема. Ово проблеме који је на услузи ЈаваСкрипта интерпретира ЈСОН текст динамицно као ЈаваСкрипт који излаже програм са погрешним или злонамерним скриптама, а често је главни проблем када се ради о подацима преузетих са интернета. Док није једини начин да се процесуира ЈСОН, то је једна лака и популарна техника која произилази из ЈСОН-ове компатибилности са ЈаваСкриптовом eval() функцијом и илустрована је са пратећим примерима кода.

ЈаваСкрипт eval()

уреди

Зато што многи ЈСОН-ов форматирани текст је такође синтаксички легалан Јава скрипт код, једноставан начин за Јава скрипт програм да чита у ЈСОН формату податке јесте да користи саграђену ЈаваСкрипт eval() функцију која је дизајнирана да процени ЈаваСкрипт изразе. Рађе него да користи ЈСОН специфичан анализатор, ЈаваСкрипт преводилац користи себе да изврши ЈСОН податке за производњу ЈаваСкрипт објеката. Како год, постоје Уницоде карактери који су валидне у ЈСОН нискама, али нису валидни у ЈаваСкрипту, па додатно бежање може бити потребно у неким случајевима пре коришћења Јава скрипт преводиоца.[14]

Осим ако су преузете мере да се прво провери податак, евал техника предлаже сигурносне пропусте ако цело Јава скрипт окружење није заједно под контролом једног поузданог извора. На пример, ако податак сам себи не верује може бити предмет злонамерних Јава скрипт кодова. Такође, таква кршења поверење могу креирати рањивости за крађу података, аутентификацију, фалсификовање и друге потенцијалне злоупотребе података и ресурса. Регуларни изрази могу бити коришћени за проверу података, пре него да се позивају на евал. На пример, РЦФ који дефинише ЈСОН(РЦФ 4627) предлаже коришћене пратећег кода да потврди ЈСОН пре процењивања (променљиви 'текст' је улаз Јсон):[15]

var my_JSON_object = !(/[^,:{}\[\]0-9.\-+Eaeflnr-u \n\r\t]/.test(
    text.replace(/"(\\.|[^"\\])*"/g, ''))) && eval('(' + text + ')');

Нова функција, JSON.parse(), је развијена као сигурнија алтернатива функције eval. Посебно је намењен за обраду ЈСОН података, а не Јава скрипта. Она је првобитно планирана за укључивање у четврто издање ЕЦМАСкрипт стандарда,[16] али се то није десило. Први пут је додат у петом издању,[17] и сада је подржан од стране великих претраживача датих у наставку. За старије, компатибилна Јава скрипт библиотека је доступна на ЈСОН.орг.

Кодирање и декодирање у претраживачу

уреди

Недавни Веб претраживачи сада имају или раде на матерњем ЈСОН-у кодирање/декодирање. Не само да ово елиминише наведени eval() безбедносни проблем, него и повећава особине због чињенице да функционисање више не мора да се рашчлани. Матерњи ЈСОН је генерално бржи у односу на ЈаваСкрипт библиотеке коришћене раније. Од јуна 2009 следећи претраживачи имају или ће имати природну подршку ЈСОН-а, путем JSON.parse() и JSON.stringify():

Бар пет популарних ЈаваСкрипт библиотека су одани ЈСОН-у:

Подразумевано кодирање за ЈСОН је УТФ8; такође је подржано и УТФ16 и УТФ32.

Објекат референце

уреди

ЈСОН стандард не подржава референце објекта, али Дојо Тоолкит илуструје како може бити усвојена конвенција за подршку такве референце користећи стандарде ЈСОН. Конкретно, дојоx.јсон.реф модул обезбеђује подршку за неколико облика, укључујући упућивање циркулару, више унутрашње поруке, и лењем референцирању.[27] Осим тога, постоје нестандардна решења као што је коришћење Мозилла ЈаваСцрипт Схарп Вариаблес, иако је ова функционалност уклоњена у Фирефоx верзији 12.[28]

Поређење са другим форматима

уреди

ЈСОН је промовисан као алтернатива за XМЛ као оба од ових формата има широку подршку за креирање, читање и декодирање у реалним ситуацијама у којима се они најчешће користе.[29] Осим XМЛ, примери могу укључити ОГДЛ, YАМЛ анд ЦСВ. Такође, Гоогле Протоцол Буфферс могу испунити ту улогу, иако то није језик за размену података.

YАМЛ је скоро, али не у потпуности, надскуп ЈСОН-а, на пример, избегавање косе црте (/) са обрнутом косом цртом () вази у ЈСОН-у, али не важи у YАМЛ-у. (То је уобичајена пракса када убризгавањем ЈСОН-а у ХТМЛ ради заштите од сцриптинг напада). Ипак, многи YАМЛ анализатори могу природно рашчланити излаз из многих ЈСОН енкодера.[30]

XМЛ је коришћен да опише структуриране податке и да емитује објекте. Када су подаци кодирани у XМЛ-у, резултат је обично већи од еквивалентног кодирања у ЈСОН-у, углавном због затварања тагова XМЛ-а. Ипак, ако се подаци сабијају помоћу алгоритма, као гзип, постоји мала разлика, јер је компресија добра на уштеду простора када се образац понавља.

XМЛ вредности немају одређени тип података.

Примери

уреди

ЈСОН пример

уреди
{
    "firstName": "John",
    "lastName": "Smith",
    "age": 25,
    "address": {
        "streetAddress": "21 2nd Street",
        "city": "New York",
        "state": "NY",
        "postalCode": "10021"
    },
    "phoneNumber": [
        {
            "type": "home",
            "number": "212 555-1234"
        },
        {
            "type": "fax",
            "number": "646 555-4567"
        }
    ]
}

Оба од следећих примера носе исту врсту информација као ЈСОН пример на различите начине.

YАМЛ пример

уреди

ЈСОН код изнад је такође 100% валидан YАМЛ; међутим, YАМЛ користи алтернативну синтаксу која је разумљивија, мењањем: {}, [], анд " са структурним размаком.[30]

---
  firstName:  John
  lastName:  Smith
  age: 25
  address: 
        streetAddress: 21 2nd Street
        city: New York
        state: NY
        postalCode: 10021
    
  phoneNumber: 
        -  
            type: home
            number: 212 555-1234
        -  
            type: fax
            number: 646 555-4567

XМЛ примери

уреди
<person>
  <firstName>John</firstName>
  <lastName>Smith</lastName>
  <age>25</age>
  <address>
    <streetAddress>21 2nd Street</streetAddress>
    <city>New York</city>
    <state>NY</state>
    <postalCode>10021</postalCode>
  </address>
  <phoneNumbers>
    <phoneNumber type="home">212 555-1234</phoneNumber>
    <phoneNumber type="fax">646 555-4567</phoneNumber>
  </phoneNumbers>
</person>
<person firstName="John" lastName="Smith" age="25">
  <address streetAddress="21 2nd Street" city="New York" state="NY" postalCode="10021" />
  <phoneNumbers>
     <phoneNumber type="home" number="212 555-1234"/>
     <phoneNumber type="fax"  number="646 555-4567"/>
  </phoneNumbers>
</person>

XМЛ кодирање може дакле бити упоредиво у дужини до еквивалентног ЈСОН кодирања. Широк спектар XМЛ технологије обраде постоји, од Доцумент Објецт Модел-а до XПатх-а и XСЛТ-а. XМЛ може такође бити стилизован за непосредни приказ користећи ЦСС. XХТМЛ је облик XМЛ тако да елементи могу бити усвојени у овом облику спремном за директно уметање у веб странице које коришћењем скриптовања.

Види још

уреди

Референце

уреди
  1. ^ Видео: Доуглас Цроцкфорд — Тхе ЈСОН Сага Архивирано на сајту Wayback Machine (11. мај 2011), на Yахоо-у! У видеу Крокфорд наводи:"Ја не тврдим да сам измислио ЈСОН ... Оно што сам ја урадио јесте: пронашао сам га, дао му име, описао како је користан. ... Дакле, идеја је била тамо негде неко време. Ја сам додао спецификацију и мало веб стране."
  2. ^ „Чип Морнингстар Биографија”. ундатед.  Проверите вредност парамет(а)ра за датум: |дате= (помоћ)
  3. ^ „Стате Софтwаре Бреакс Тхроугх Wеб Апп Девелопмент Барриер Wитх Стате Апплицатион Фрамеwорк: Софтвер омогућава праве интерактивне апликације; Заиста, смањује трошкове и време потребно за развој и унапређује корисничко искуство”. ПР Неwсwире. 12. 2. 2002. 
  4. ^ Yахоо!. „Коришћење ЈСОН-а са Yахоо! веб сервисом”. Архивирано из оригинала 11. 10. 2007. г. Приступљено 3. 7. 2009. 
  5. ^ Гоогле. „Коришћење ЈСОН-а са Гоогле Дата АПИс”. Приступљено 3. 7. 2009. 
  6. ^ Цроцкфорд, Доуглас (28. 5. 2009). „Представљање ЈСОН-а”. јсон.орг. Приступљено 3. 7. 2009. 
  7. ^ ЈСОН ин ЈаваСцрипт Архивирано на сајту Wayback Machine (10. јул 2016), он ЈСОН'с wеб паге: "Тхе евал фунцтион ис верy фаст. Хоwевер, ит цан цомпиле анд еxецуте анy ЈаваСцрипт програм, со тхере цан бе сецуритy иссуес [...]"
  8. ^ Цроцкфорд, Доуглас (9. 7. 2008). „ЈСОН ин ЈаваСцрипт”. јсон.орг. Архивирано из оригинала 10. 7. 2016. г. Приступљено 8. 9. 2008. 
  9. ^ ЈСОН Сцхема
  10. ^ ЈСОН Сцхема драфт 4
  11. ^ ЈСОН Сцхема имплементатионс
  12. ^ ИАНА | Апплицатион Медиа Тyпес
  13. ^ Гарретт, Јессе Јамес (18. 2. 2005). „Ајаx: Нови приступ веб апликацијама”. Адаптиве Патх. Архивирано из оригинала 3. 11. 2013. г. Приступљено 19. 3. 2012. 
  14. ^ „ЈСОН: Подскуп ЈаваСкрипта”. Магнус Холм. Архивирано из оригинала 13. 05. 2012. г. Приступљено 16. 5. 2011. 
  15. ^ Цроцкфорд, Доуглас (јул 2006). „ИАНА Цонсидератионс”. апликација/јсон за ЈаваСцрипт (ЈСОН). ИЕТФ. сец. 6. дои:10.17487/РФЦ4627 . РФЦ 4627. Приступљено 21. 10. 2009. 
  16. ^ Цроцкфорд, Доуглас (6. 12. 2006). „ЈСОН: Алтернатива за XМЛ”. Приступљено 3. 7. 2009. 
  17. ^ „ЕЦМАСцрипт Фифтх Едитион” (ПДФ). Архивирано из оригинала (ПДФ) 12. 4. 2015. г. Приступљено 18. 3. 2011. 
  18. ^ „Усинг Нативе ЈСОН”. 30. 6. 2009. Архивирано из оригинала 05. 03. 2012. г. Приступљено 3. 7. 2009. 
  19. ^ Барсан, Цорнелиу (10. 9. 2008). „Нативе ЈСОН ин ИЕ8”. Приступљено 3. 7. 2009. 
  20. ^ „Wеб специфицатионс суппортед ин Опера Престо 2.5”. 10. 3. 2010. Архивирано из оригинала 12. 02. 2012. г. Приступљено 29. 3. 2010. 
  21. ^ Хунт, Оливер (22. 6. 2009). „Имплемент ЕС 3.1 ЈСОН објецт”. Приступљено 3. 7. 2009. 
  22. ^ „YУИ 2: ЈСОН утилитy”. 1. 9. 2009. Архивирано из оригинала 12. 2. 2012. г. Приступљено 22. 10. 2009. 
  23. ^ „Учити ЈСОН”. 7. 4. 2010. Приступљено 7. 4. 2010. 
  24. ^ „Тицкет #4429”. 22. 5. 2009. Архивирано из оригинала 12. 2. 2012. г. Приступљено 3. 7. 2009. 
  25. ^ „Тицкет #8111”. 15. 6. 2009. Архивирано из оригинала 20. 02. 2012. г. Приступљено 3. 7. 2009. 
  26. ^ „Тицкет 419”. 11. 10. 2008. Архивирано из оригинала 06. 11. 2018. г. Приступљено 3. 7. 2009. 
  27. ^ Зyп, Крис (17. 6. 2008). „ЈСОН референцинг ин Дојо”. Приступљено 3. 7. 2009. 
  28. ^ „Схарп вариаблес”. Архивирано из оригинала 06. 05. 2012. г. Приступљено 21. 4. 2012. 
  29. ^ „ЈСОН: Тхе Фат-Фрее Алтернативе то XМЛ”. јсон.орг. Приступљено 14. 3. 2011. 
  30. ^ а б YАМЛ Версион 1.2

Спољашње везе

уреди