1 JSON datu apmaiņas formāts Java Script Object Notation (JSON) ir datu apmaiņas formāts: 1) balstīts uz teksta formātu; 2) viegli lasāms; 3) neskatoties uz sākotnējo izcelsmi no JavaScript valodas, valodu neatkarīgu formāts un var tikt izmantots jebkurā citā programmēšanas valodā; 4) JSON datu apmaiņas formāts izveidots strukturēto datu pārraidei tīklā.1 JSON izauga no nepieciešamības pēc: 1) bezvalsts; 2) reāllaika; 3) servera-pārlūkprogrammas saziņas protokola, neizmantojot pārlūkprogrammas spraudņus, piemēram, Flash vai Java sīklietotnes, kas dominēja 2000. gadu sākumā. Netscape 4.0.5+ un IE 5+ Duglass Krokfords pirmo reizi precizēja un popularizēja JSON formātu. State Software līdzdibinātāji vienojās izveidot sistēmu, kas izmanto standarta pārlūkprogrammas iespējas un nodrošināja abstrakcijas slāni tīmekļa izstrādātājiem. 1 https://en.wikipedia.org/wiki/JSON 2 XML un JSON valodu datu dokumentu piemēri XML piemērs < darbinieki > < darbinieks> <vards>Juris</vards> < uzvards >Koks</ uzvards> </ darbinieks> < darbinieks> < vards>Anna</vards > < uzvards >Sakne</ uzvards> </ darbinieks> < darbinieks> < vards>Liene</vards > < uzvards >Liepa</ uzvards> </ darbinieks> </ darbinieki > JSON piemērs {"darbinieki":[ { "vards":"Juris", "uzvards":"Koks" }, { "vards":"Anna", " uzvards ":"Sakne" }, { "vards":"Liene", " uzvards ":"Liepa" } ]} Lietojumprogramma JSON Datu bāzes sistēma JSON 3 JSON sintakse un datu vērtības JSON sintakse ir atvasināta no JavaScript objekta apzīmējumu sintakses: 1) dati ir nosaukuma/vērtības pāros; 2) dati tiek atdalīti ar komatiem; 3) figūriekavās iekļauj objektus; 4) kvadrātiekavas satur masīvus. Nosaukuma/vērtības pāris sastāv no lauka (field) nosaukuma (dubultpēdiņās), kam seko kols un vērtība: "vārds": "Jānis" JSON vērtībām ir jābūt vienam no šiem datu veidiem: 1) virkne; 2) skaitlis; 3) objekts; 4) masīvs; 5) Būla vērtība; 6) null. Simbolu virknes JSON ir jāraksta dubultpēdiņās. {"vārds" : "Jānis"} Skaitļiem JSON ir jābūt veselam skaitlim vai skaitlim ar peldošu komatu. {"vecums" : 30} JSON ir objekti. { "darbinieks":{"vārds" : "Jānis", "vecums" : 30, "pilsēta":"Rīga"}} JSON ir masīvi. { "darbinieki":["Jānis", "Anita", "Rasma"]} JSON var būt loģiskās vērtības. {"false" : true} JSON vērtība var būt arī null. {"mājas telefons" : null} Tā kā JSON sintakse ir atvasināta no JavaScript objektu apzīmējuma, ir nepieciešams ļoti maz papildu programmatūras, lai strādātu ar JSON JavaScript valodā. JSON failu faila tips ir ".json". 4 JSON datu formāta dokumenta piemērs Šajā piemērā ir parādīts JSON objekts, kas apzīmē pirkuma pasūtījumu. { "PasNumurs" "Atsauce" "Pieprasītājs" "Lietotājs" "IzmaksuCentrs" "PārdošanasDati" : 1600, : "Dokuments1003", : "Jānis Koks", : "Janis7", : "FirmaA", : { "VārdsUzvārds" : "Jānis Koks", "Adrese" : { "iela" : "70 Stabu", "pilsēta" : "Rīga", "pastaIndeks" : 1077, "valsts" : "Latvijas Valsts" }, "Tālrunis" : [ { "tips" : "Birojs", "numurs" : "909-555-7307" }, { "tips" : "Mobilais", "numurs" : "415-555-1234" } ] }, "Īpašās instrukcijas" : null, "AtļautDaļējuPasūtījumu" : false, "RindasVienības" : [ { "VienībasNumurs" : 1, "Daļa" : { "Apraksts" : "JSON valoda", "Vienības cena": 30,50, "UPCCods": 13131092899}, "Daudzums" : 2 }, { "VienībasNumurs" : 2, "Daļa" : { "Apraksts" : "JSON datu bāzes sistēmas", "Vienības cena": 43,77, "UPCCods": 85391628927}, "Daudzums" : 3 } ] } Lielākajai daļai šeit esošo lauku ir virkņu vērtības. Piemēram: laukam Lietotājs ir vērtība "Janis7". Laukiem PONumurs un zipKods ir skaitliskās vērtības: 1600 un 99236. Lauka PārdošanasDati vērtība ir objekts. Šim objektam ir trīs dalībnieki ar laukiem VārdsUzvārds, Adrese un Tālrunis. Laukam VārdsUzvārds ir virknes vērtība ("JānisKoks"). Lauka Adrese vērtība ir objekts ar laukiem iela, pilsēta, pasta indekss un valsts. Laukam PastaIndeks ir skaitliska vērtība; pārējiem ir virknes vērtības. Lauka Tālrunis vērtība ir masīvs. Šajā masīvā ir divi elementi, no kuriem katrs ir objekts. Katram no šiem objektiem ir divi dalībnieki: lauki tips un numurs ar to vērtībām. Īpašo instrukciju laukam ir nulles vērtība. Laukam AtļautDaļējuPasūtījumu ir Būla vērtība FALSE. Lauka RindasVienības vērtība ir masīvs. Šajā masīvā ir divi elementi, no kuriem katrs ir objekts. Katram no šiem objektiem ir trīs dalībnieki ar laukiem VienībasNumurs, Daļa un Daudzums. Laukiem VienībasNumurs un Daudzums ir skaitliskas vērtības. Lauks Daļa ir objekts ar laukiem Apraksts, Vienības cena un UPCCods. Laukam Apraksts ir virknes vērtība. Laukiem VienībasCena un UPCCode ir skaitliskas vērtības. 5 XML dokuments FIRMA <?xml version="1.0" encoding="UTF-8"?> <FirmasIndekss>21</FirmasIndekss> <Nosaukums>Latvijas rupjmaize</Nosaukums> <Adrese> <iela>Avotu 4</iela> <pilseta>Rīga</pilseta> <pastaIndeks>1077</pastaIndeks> <valsts>Latvijas Valsts</valsts> </Adrese> <Telefons> <tips>galda</tips> <numurs>6722222</numurs> </Telefons> <Telefons> <tips>mobilais</tips> <numurs>2733333</numurs> </Telefons> <Produkcija>rudzumaize</Produkcija> <Produkcija>baltmaize</Produkcija> <Produkcija>cepumi</Produkcija> <Darbinieki> <vards>Ventis</vards> <uzvards>Kronis</uzvards> <amati>direktors</amati> <amati>tehnologs</amati> </Darbinieki> <Darbinieki> <vards>Liene</vards> <uzvards>Lapa</uzvards> <amati>operators</amati> <amati>elektrikis</amati> </Darbinieki> 6 Dokuments FIRMA JSON formātā { "FirmasIndekss" "Nosaukums" "Adrese" "Telefons" "Produkcija" "Darbinieki" : 21, : "Latvijas rupjmaize", : { "iela" : "Avotu 4", "pilseta" : "Rīga", "pastaIndeks" : 1077, "valsts" : "Latvijas Valsts" }, : [ { "tips" : "galda", "numurs" : "6722222" }, { "tips" : "mobilais", "numurs" : "2733333" } ], : ["rudzumaize", "baltmaize", "cepumi"], : [{"vards" : "Ventis", "uzvards" : "Kronis", "amati" : ["direktors", "tehnologs"]}, {"vards" : "Liene", "uzvards" : "Lapa", "amati" : ["operators", "elektrikis"]}]} 7 Dokumentu datu bāze JSON dokumentu datubāze ir nerelācijas datu bāzes veids, kas ir paredzēts datu glabāšanai un vaicājumiem kā JSON dokumentiem, nevis datu normalizēšanai vairākās tabulās, katrai no tām ir unikāla un fiksēta struktūra, kā tas ir relāciju datu bāzē. Dokumentu datu bāze ir nerelāciju datu bāzes veids, kas paredzēts uz dokumentiem orientētas informācijas glabāšanai, izgūšanai vadībai un pārvaldībai. Tā vietā, lai sākotnēji būtu definēta shēma, dokumentu datubāzes ļauj uzglabāt datus kolekcijās, kas sastāv no dokumentiem. Dokumentu datu bāzes bieži ir populāras izstrādātāju vidū, jo tajās dati tiek glabāti dokumenta modeļa formātā (daļēji strukturētā), nevis relāciju (strukturētā) formātā. Dokumentu datu bāzes piedāvā lielāku elastību, jo: 1) izstrādātājiem nav iepriekš jāplāno shēmas; 2) viņi var izmantot to pašu formātu, ko izmanto savā lietojumprogrammas kodā. Tas nozīmē, ka SQL datu bāzes rūpīgā plānošana nav tik nepieciešama, tāpēc dokumentu datu bāzes ir noderīgas strauji mainīgām shēmām, kas var būt izplatītas programmatūras izstrādē. Bet tas var notikt uz ātruma, izmēra un specifikas rēķina. Raksturlielumi, kas nosaka JSON dokumentu datu bāzi: 1) JSON dokumentu datu bāze ir nerelāciju datu bāze, kas paredzēta JSON dokumentu glabāšanai un meklēšanai; 2) JSON dati datu bāzē ir tekstuāli, taču tekstu var saglabāt, izmantojot datu tipu BLOB, VARCHAR2, CLOB vai bināro JSON datu tipu; 3) piekļuve datu bāzē saglabātajiem JSON datiem ir līdzīga piekļuvei citiem datu bāzes datiem, tostarp izmantojot OCI, .NET un JDBC JSON datus JSON dokumentu datu bāzē var uzglabāt, indeksēt un veikt vaicājumus, neizmantojot shēmu, kas definē datus. JSON ir viegls datu pārsūtīšanas formāts, kas ir noteicis dokumentu apmaiņas standartu. Uzglabājot JSON datus JSON dokumentu datu bāzē, tiek izmantotas kolonnas, kuru datu tipi ir VARCHAR2, CLOB, BLOB vai binārais JSON datu tips 21c. Izvēli, kuru izmantot, parasti nosaka JSON dokumentu lielums. JSON datu glabāšana datu bāzē, izmantojot standarta SQL datu tipus, nozīmē, ka ar JSON datiem var manipulēt tāpat kā ar jebkuru citu datu tipu. 8 Datu bāzes vadības sistēmas, kurās iekļauta JSON datu izmantošana MongoDB MongoDB is used by some of the largest companies in the world, including Facebook, Google, Nokia, MTV Networks, Cisco, Forbes, and many more. MongoDB actually stores the JSON documents in a binary-encoded format called BSON. BSON extends JSON through supporting additional data types and to be efficient for encoding and decoding within different languages. Couchbase The Couchbase Data Platform includes Couchbase Server and Couchbase Mobile. Both of these are open-source, NoSQL, multi-model, document-oriented database management systems that store JSON documents. Couchbase refers to its platform as the industry's first Engagement Database — a new class of database that can tap into dynamic data, at any scale and across any channel or device. CouchDB Apache CouchDB is a document oriented open source database management system that uses JSON natively. CouchDB was first released in 2005 and later became an Apache Software Foundation project in 2008. Azure DocumentDB is Microsoft’s multi-tenant distributed database service for managing JSON documents at Internet scale. DocumentDB indexing enables automatic indexing of documents without requiring a schema or DocumentDB secondary indices. DocumentDB is designed to provide real-time consistent queries in the face of very high rates of document updates. MarkLogic MarkLogic is considered a multi-model NoSQL database for its ability to store, manage, and search JSON and XML documents and semantic data (RDF triples). MarkLogic was initially based on XML, but has since evolved to natively store JSON documents and RDF triples. OrientDB OrientDB is an open source NoSQL database management system written in Java. It is a multi-model database, supporting graph, document, key/value, and object models, but the relationships are managed as in graph databases with direct connections between records. OrientDB natively supports HTTP, RESTful protocol, and JSON additional libraries or components. RethinkDB RethinkDB is the first open-source, scalable JSON database built from the ground up for the realtime web. RethinkDB is designed specifically to push data to applications in realtime. Riak Riak is a distributed NoSQL key-value data store that offers high availability, fault tolerance, operational simplicity, and scalability. Although Riak wasn’t explicitly created as a document store, it does have features that make it possible to store and query JSON objects or XML. BaseX BaseX is a native and light-weight XML database management system and XQuery processor, developed as a community project on GitHub. Although it's an XML database, its JSON module contains functions to parse and serialize JSON documents. Elasticsearch Elasticsearch is a search engine based on Lucene. It provides a distributed, multitenant-capable full-text search engine with an HTTP web interface and schema-free JSON documents. MySQL MySQL 5.7.8 introduced a native JSON data type that enables efficient access to data in JSON. This includes optimized storage, and automatic validation of JSON documents stored in JSON columns. Oracle Although Oracle Database is an object-relational database, it does support JSON (and XML). It supports JSON natively with relational database features, including transactions, indexing, declarative querying, and views. PostgreSQL (often referred to as Postgres), is an object-relational database management system (ORDBMS) with an emphasis on extensibility and standards-compliance. PostgreSQL PostgreSQL also has a number of JSON functions and operators that can be used with its two JSON data types (JSON, and JSONB). 9 Atbalsta pakāpēs JSON izmantošanai datu bāzes sistēmās Gan RDBMS, gan NoSQL datu bāzes izstrādātāji ir pievienojuši dažādus atbalsta pakāpes JSON datu glabāšanai un apstrādei. Datu bāzes sistēmās JSON datus saglabā: 1) tieši kā tekstu; 2) jaunu JSON tipa sistēmu, kas nodrošina bināro kodēšanas formātu. Pēdējais variants kļūst arvien populārāks, jo tas nodrošina bagātāku tipa sistēmu un efektīvu vaicājumu apstrādi. Oracle firmas unikāli izstrādātais Oracle Binary JSON formāts (OSON) spēj paātrināt gan OLAP, gan OLTP darba slodzes, izmantojot JSON dokumentus.2 2 http://www.vldb.org/pvldb/vol13/p3059-liu.pdf 10 JSON dokumentu datubāzes izmantošana Satura pārvaldība JSON dokumentu datu bāze ir lieliska izvēle satura pārvaldības lietojumprogrammām, piemēram, emuāriem un video platformām, jo katru entītiju var saglabāt kā vienu JSON dokumentu. Ja datu modelis ir jāmaina, ir jāatjaunina tikai ietekmētie dokumenti, nav nepieciešami shēmas atjauninājumi un datu bāzes dīkstāve. Lietotāju profili JSON dokumentu datu bāzes ir labs risinājums tiešsaistes profiliem, kuros dažādi lietotāji sniedz dažāda veida informāciju. Izmantojot JSON dokumentu datu bāzi, varat efektīvi saglabāt katra lietotāja profilu, saglabājot tikai katram lietotājam raksturīgos atribūtus. JSON dokumentu datu bāzes viegli pārvalda šo individualitātes un plūstamības līmeni. Katalogi JSON dokumentu datu bāzes ir efektīvas un iedarbīgas katalogu informācijas glabāšanai. Piemēram, e-komercijas lietotnē dažādiem produktiem parasti ir atšķirīgs atribūtu skaits. Šos atribūtus var aprakstīt vienā JSON dokumentā, lai atvieglotu pārvaldību un ātrāku lasīšanas ātrumu, nekā tas būtu iespējams ar relāciju datu bāzi. Lielie dati reāllaikā Spēja iegūt operatīvo informāciju reāllaikā ir ļoti svarīga ļoti konkurētspējīgā uzņēmējdarbības vidē. Izmantojot JSON dokumentu datu bāzes, uzņēmums var uzglabāt un pārvaldīt darbības datus no jebkura avota un vienlaikus ievadīt datus izvēlētajam BI dzinējam analīzei, neizmantojot divas atsevišķas vides. 11 JSON datu formāta izmantošana Oracle datu bāzes sistēmā3 Bezshēmas izstrāde, kuras pamatā ir JSON dokumentu dati, ļauj ātri reaģēt uz mainīgajām lietojumprogrammu prasībām. Atšķirībā no relāciju datiem, JSON datus var glabāt datu bāzē, indeksēt un veikt vaicājumus, neizmantojot shēmu, kas definē datus. JSON dati ir bezshēmas, lai gan datu bāzes shēma tiek izmantota, lai definētu tabulu un kolonnu, kurā tie tiek glabāti. Nekas šajā shēmā nenorāda pašu JSON datu struktūru. Oracle DBS nodrošina visas SQL un relāciju datu bāzu priekšrocības JSON datiem, kuri tiek uzglabāti un ar tiem manipulēts, kā jebkura cita veida datu bāzes dati. Tiek atbalstītas: 1) transakcijas; 2) indeksēšana; 3) deklaratīvie vaicājumi; 4) skati. Izmantojot Oracle DBS, var izmantot SQL, lai savienotu JSON datus ar relāciju datiem. Var arī transformēt JSON datus relāciju veidā, padarot tos pieejamus relāciju procesiem un rīkiem. Var arī no datu bāzes vaicāt JSON datus, kas tiek glabāti ārpus Oracle DBS ārējā tabulā. Var piekļūt datubāzē saglabātajiem JSON datiem tāpat kā citiem datu bāzes datiem, tostarp izmantojot Oracle Call Interface (OCI) un Java datu bāzes savienojamību (JDBC). Oracle DBS saglabā JSON datus tekstuāli, izmantojot parastos SQL datu tipus VARCHAR2, CLOB un BLOB kā neparsētus rakstzīmju datus. JSON datus datu bāzē var glabāt izmantojot relāciju tabulas kolonnas, kuru datu tipi ir: 1) JSON, 2) VARCHAR2, 3) CLOB vai BLOB. Neatkarīgi no izmantotā veida var manipulēt ar JSON datiem tāpat, kā manipulētu ar citiem šāda veida datiem. Oracle iesaka izmantot JSON datu tipu, kas saglabā JSON datus vietējā binārajā formātā. Ja tā vietā izmantojat kādu no citiem veidiem, izvēli, kuru izmantot, parasti motivē JSON dokumentu lielums: 1) izmanto VARCHAR2(4000), ja lielākie JSON dokumenti nepārsniedz 4000 baitus (vai rakstzīmes); 2) izmantojiet VARCHAR2(32767), ja JSON dokumenti ir lielāki par 4000 baitiem (vai rakstzīmēm), un neviens no dokumentiem nepārsniedz 32 767 baitus (vai rakstzīes); 3) izmanto BLOB (binārais lielais objekts) vai CLOB (rakstzīmju liels objekts) krātuvi, ja ir daži JSON dokumenti, kas ir lielāki par 32767 baitiem (vai rakstzīmēm). Ja JSON datu glabāšanai neizmanto JSON datu tipu, var izmantot SQL/JSON nosacījumu json, lai pārbaudītu, vai daži JSON dati ir pareizi izveidoti. 3 https://docs.oracle.com/en/database/oracle/oracle-database/19/adjsn/intro-to-json-data-and-oracle-database.html#GUID17642E43-7D87-4590-8870-06E9FDE9A6E9 12 Tabulas izveide ar JSON kolonnu. DBS Oracle piemērs Var izveidot tabulu, kurā ir JSON kolonnas. Oracle iesaka šim nolūkam izmantot JSON datu tipu. Izmantojot teksta JSON datus, lai veiktu INSERT vai UPDATE darbību JSON tipa kolonnā, dati tiek netieši iesaiņoti ar konstruktoru JSON. Ja kolonnā ir VARCHAR2, CLOB vai BLOB dati, izmanto nosacījumu is json kā pārbaudes ierobežojumu, lai nodrošinātu, ka ievietotie dati ir (labi veidoti) JSON dati. create table J_PIRKUMA_PASUTIJUMS( (id VARCHAR2 (32) NOT NULL PRIMARY KEY, date_loaded TIMESTAMP (6) WITH TIME ZONE, po_document JSON); create table j_purchaseorder (id VARCHAR2 (32) NOT NULL PRIMARY KEY, date_loaded TIMESTAMP (6) WITH TIME ZONE, po_document VARCHAR2 (23767) CONSTRAINT ensure_json CHECK (po_document is json)); insert into J_PIRKUMA_PASUTIJUMS values (SYS_GUID(), to_date('30-DEC-2014'), '{"PONumber" : 1600, "Reference" : "ABULL-20140421", "Requestor" : "Alexis Bull", "User" : "ABULL", "CostCenter" : "A50", "ShippingInstructions" : {"name" : "Alexis Bull", "Address" : {"street" : "200 Sporting Green", "city" : "South San Francisco", "state" : "CA", "zipCode" : 99236, "country" : "United States of America"}, "Phone" : [{"type" : "Office", "number" : "909-555-7307"}, {"type" : "Mobile", "number" : "415-555-1234"}]}, "Special Instructions" : null, "AllowPartialShipment" : true, "LineItems" : [{"ItemNumber" : 1, "Part" : {"Description" : "One Magic Christmas", "UnitPrice" : 19.95, "UPCCode" : 13131092899}, "Quantity" : 9.0}, {"ItemNumber" : 2, "Part" : {"Description" : "Lethal Weapon", "UnitPrice" : 19.95, "UPCCode" : 85391628927}, "Quantity" : 5.0}]}'); insert into J_PIRKUMA_PASUTIJUMS values (SYS_GUID(), to_date('30-DEC-2014'), 13 '{"PONumber" : 672, "Reference" : "SBELL-20141017", "Requestor" : "Sarah Bell", "User" : "SBELL", "CostCenter" : "A50", "ShippingInstructions" : {"name" : "Sarah Bell", "Address" : {"street" : "200 Sporting Green", "city" : "South San Francisco", "state" : "CA", "zipCode" : 99236, "country" : "United States of America"}, "Phone" : "983-555-6509"}, "Special Instructions" : "Courier", "LineItems" : [{"ItemNumber" : 1, "Part" : {"Description" : "Making the Grade", "UnitPrice" : 20, "UPCCode" : 27616867759}, "Quantity" : 8.0}, {"ItemNumber" : 2, "Part" : {"Description" : "Nixon", "UnitPrice" : 19.95, "UPCCode" : 717951002396}, "Quantity" : 5}, {"ItemNumber" : 3, "Part" : {"Description" : "Eric Clapton: Best Of 1981-1999", "UnitPrice" : 19.95, "UPCCode" : 75993851120}, "Quantity" : 5.0}]}'); 14 JSON kolonas datu bāzes tabulās OraDBS nenosaka ierobežojumus tabulām, kuras var izmantot JSON dokumentu glabāšanai. Kolonna, kurā ir JSON dokumenti, var pastāvēt līdzās jebkura cita veida datu bāzes datiem. Tabulā var būt arī vairākas kolonnas, kurās ir JSON dokumenti. Izmantojot Oracle Database kā JSON dokumentu krātuvi, jūsu tabulās, kurās ir JSON kolonnas, parasti ir arī dažas citas kolonnas, kas nav JSON. Pēc definīcijas teksta JSON dati tiek kodēti, izmantojot unikoda kodējumu UTF-8 vai UTF-16. Varat izmantot teksta datus, kas tiek glabāti rakstzīmju kopā, kas nav Unikoda rakstzīmju kopa, it kā tie būtu JSON dati, taču tādā gadījumā OraDBS, apstrādājot datus, automātiski pārvērš rakstzīmju kopu par UTF-8. 15 JSON datu kolonas lietošana datu bāzē. JSON dati ar masīvu Strādājot ar JSON datiem datu bāzē, var veikt šādus uzdevumus: 1) izveidot JSON kolonnu ar IS JSON pārbaudes ierobežojumu; 2) ievietot JSON datus kolonnā; 3) vaicājot izgūt JSON datus. Izveidojam tabulu ar primārās atslēgas kolonnu. JSON kolonnu un pievieno is json pārbaudes ierobežojumu, lai nodrošinātu, ka JSON kolonna satur tikai pareizi veidotus JSON datus. Šis priekšraksts izveido tabulu PIRKUMI ar primārās atslēgas ID un JSON kolonnu PIRKUMS. create table PIRKUMI ( ID varchar2(32) NOT NULL Primary key, DATUMS timestamp (6) WITH TIME ZONE, PIRKUMS varchar2(4000) constraint GARANTET_KA_IR_JSON CHECK(PIRKUMS is JSON)); Ievieto JSON datus JSON kolonnā, izmantojot jebkuru no Oracle Database pieejamajām metodēm. Piemērā izmanto SQL INSERT priekšrakstu, lai tabulas PIRKUMI trešajā kolonnā ievietotu dažus vienkāršus JSON datus (kolonna PIRKUMS). insert into PIRKUMI values (SYS_GUID(), TO_DATE('15-JUN-2021'), '{"PirkNum" : 21, "PirkNos" : "JANIS_15_07", "Pircejs" : "Janis", "Preces" : ["maize", "sviests", "piens"]}'); Veicam JSON datu izgūšanu. Atgrieztā vērtība vienmēr ir VARCHAR2 instance, kas ietver JSON vērtību. Šis vaicājums no katra dokumenta JSON kolonnā PIRKUMS izvelk skalāro vērtību PirkNUM, PirkNos, Pircejs un masīvu, kas ir lauka Preces vērtība. select a.PIRKUMS from PIRKUMI a; select a.PIRKUMS.PirkNum from PIRKUMI a; Lielo un mazo burtu atšķirīga lietošana: select a.PIRKUMS.PIRKNum from PIRKUMI a; select a.PIRKUMS.PirkNum, a.PIRKUMS.Pircejs from PIRKUMI a; 16 Šis vaicājums no katra dokumenta izgūst masīva PRECES vairākas vērtības kā masīvu. Masīva elementu secība nav noteikta. select a.PIRKUMS.PirkNum, a.PIRKUMS.Pircejs, a.PIRKUMS.Preces from PIRKUMI a; select a.PIRKUMS.PirkNum, a.PIRKUMS.Pircejs, a.PIRKUMS.Preces.piens from PIRKUMI a; 17 JSON datu kolonas lietošana datu bāzē. JSON dati ar objektu create table PIRKUMI_O ( ID varchar2(32) NOT NULL Primary key, DATUMS timestamp (6) WITH TIME ZONE, PIRKUMS varchar2(4000) constraint GARANTET_KA_IR_JSON_O CHECK(PIRKUMS is JSON)); insert into PIRKUMI_O values (SYS_GUID(), TO_DATE('15-JUN-2021'), '{"PirkNum" : 21, "PirkNos" : "JANIS_15_07", "Pircejs" : "Janis", "Preces" : {"maize" : 1.5, "sviests" : 3.5, "piens": 1}}'); select a.PIRKUMS from PIRKUMI_O a; select a.PIRKUMS.Preces from PIRKUMI_O a; select a.PIRKUMS.Preces.maize from PIRKUMI_O a; 18 JSON shēma Var izveidot JSON shēmu, pēc kuras pārbaudīt JSON dokumentu struktūru un veida informāciju. Var pārbaudīt datus izpildes laikā vai veikt to ar pārbaudes ierobežojumu, lai nodrošinātu, ka JSON kolonnā tiek ievietoti tikai shēmai derīgi dati. Lielākā daļa JSON datu lietojumi ir bezshēmas. Dažreiz varētu vēlēties, lai daži JSON dati atbilstu shēmai. JSON shēma ir JSON dokuments, kurā ievērots JSON shēmas standarts, kas ir komentāru pieprasījuma (RFC) uzmetums. JSON shēmas var izmantot, lai aprakstītu vai apstiprinātu citus JSON dokumentus. JSON shēma norāda to JSON datu atļauto vērtību struktūru un veidus, kurus tā uzskata par derīgiem. "Derīgums" vienmēr attiecas uz doto shēmu. (No otras puses, "labi veidota" nozīmē tikai sintaktiski pareizu.) Oracle Database atbalstītās JSON shēmas ir autonomas. Tās nevar ietvert vai importēt citas JSON shēmas. (Ja mēģināt to darīt, shēmas atslēgvārdi, kurus izmantojat, vienkārši tiek ignorēti, it kā tie būtu lietotāja definēti atslēgvārdi.) Tomēr pareizi definētu lietojumprogrammu lietošanas domēnu varat izmantot kā JSON shēmu, un domēni ļauj eksportēt un citu domēnu importēšana. (Tie arī ļauj izsekot un attīstīt atkarību.) Šis ir vienkāršas JSON shēmas piemērs, kurā tiek izmantoti tikai standarta lauki (atslēgvārdi): {"type" : "object", "properties" : {"firstName" : {"type" : "string", "minLength" : 1}, "salary" : {"type" : "number", "minimum" : 10000}}, "required" : ["firstName"]} Šis vaicājums atlasa tikai tos datus, kas tiek pārbaudīti attiecībā pret parādīto burtisko JSON shēmu, kas prasa, lai laukam PONumber skaitliskā vērtība ir vismaz 0. Tas darbojas pat tad, ja kolonna j_purchaseorder tika izveidota bez shēmas validācijas pārbaudes ierobežojuma. SELECT po_document FROM j_purchaseorder WHERE po_document IS JSON VALIDATE '{"type" : "object", "properties" : {"PONumber": {"type" : "number", "minimum" : 0}}}'