Uploaded by globus2003

JSON datu apmaiņas formāts

advertisement
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}}}'
Download