•Joker1343
Strain
Karma: -1
Deconectat
Mesaje: 1
|
 |
« : Mai 11, 2015, 12:44:16 » |
|
Se cere implementarea unei structuri de date (hashtable) care sa eficientizeze interogarea si manipularea obiectelor de tip JSON.
example.json [ { "firstName": "John", "lastName": "Smith", "isAlive": true, "age": 25, "address": { "streetAddress": "21 2nd Street", "city": "New York", "state": "NY", "postalCode": "10021-3100" }, "phoneNumbers": [ { "type": "home", "number": "212 555-1234" }, { "type": "office", "number": "646 555-4567" } ], "children": [ ], "spouse": null } ]
Tipurile de baza pentru obiectele JSON sunt:
JSON_ARRAY: vector cu 0 sau mai multe objects JSON_OBJECT: colectie de perechi cheie:valoare unde cheia este de tip string (unica in cadrul object-ului) iar valoarea poate fi de orice tip JSON_STRING: secventa de 0 sau mai multe caractere ASCII JSON_BOOL: true sau false JSON_NUMBER: intreg JSON_NULL: valoare nula, reprezentata de cuvantul null
Operatiile pe care structura voastra de date trebuie sa le efectueze sunt:
get(succesiune_chei): afiseaza valoarea ultimei chei din succesiunea de chei put(succesiune_chei, valoare): adauga/modifica perechea ultima_cheie:valoare del(succesiune_chei): sterge perechea ultima_cheie:valoare Operatiile pot esua cu urmatoarele mesaje de eroare, urmate de valoarea cheii la care au esuat:
ERROR_NOT_ARRAY: se cere un index de la o cheie care nu reprezinta un JSON_ARRAY ERROR_NOT_OBJECT: se cere o cheie de la o cheie care nu reprezinta un JSON_OBJECT ERROR_INDEX_OUT_OF_RANGE: se cere un index de la o cheie care reprezinta un JSON_ARRAY cu un numar mai mic de intrari decat index-ul cerut KEY_NOT_FOUND: cheia cautata nu a fost gasita Fiecare mesaj de eroare este precedat de numele operatiei la care a aparut eroarea.
Pentru a observa comportamentul operatiilor de mai sus, urmariti exemplul de input/output.
Exemplu input/output
Operatiile de mai jos sunt efectuate asupra JSON-ului din example.json
input
GET GET 0 GET 0 "firstName" GET 0 "age" GET 0 "isAlive" GET 0 "spouse" GET 0 "notAKey" GET 0 "address" "city" GET 0 "address" "notAKey" GET 0 "notAKey1" "notAKey2" GET 0 "spouse" 0 GET 0 "phoneNumbers" 0 GET 0 "phoneNumbers" 0 "type" GET 0 "children" GET 0 "children" 0 PUT "aKey" "aValue" PUT 0 "aKey" "aValue" GET 0 "aKey" PUT 0 "address" null GET 0 "address" "city" GET 0 "address" PUT 0 "spouse" "Jessica" GET 0 "spouse" PUT 0 "phoneNumbers" 1 "type" "mobile" GET 0 "phoneNumbers" 1 "type" PUT 0 "children" 0 "name" "John Snow" DEL 0 "firstName" GET 0 "firstName" DEL 0 "notAkey" DEL 1 "firstName" GET 0 "phoneNumbers" 0 "number" DEL 0 "phoneNumbers" 0 GET 0 "phoneNumbers" 0 "number" DEL 0 "spouse" DEL 0 "address" GET 0 "address" "city"
output
JSON_ARRAY JSON_OBJECT "John" 25 true null GET_KEY_NOT_FOUND "notAKey" "New York" GET_KEY_NOT_FOUND "notAKey" GET_KEY_NOT_FOUND "notAKey1" GET_ERROR_NOT_ARRAY "spouse" JSON_OBJECT "home" JSON_ARRAY GET_ERROR_INDEX_OUT_OF_RANGE "children" PUT_ERROR_NOT_OBJECT root "aValue" GET_ERROR_NOT_OBJECT "address" null "Jessica" "mobile" PUT_ERROR_INDEX_OUT_OF_RANGE "children" GET_KEY_NOT_FOUND "firstName" DEL_INDEX_OUT_OF_RANGE root "212 555-1234" "646 555-4567" GET_KEY_NOT_FOUND "address"
Precizari
Fisierele de test cu obiectele JSON sunt valide, nu este nevoie sa faceti verificari suplimentare.
Indicatii de implementare
Executabilul se va numi "jsonparser" si va primi exact 3 parametri: fisierul ce contine obiectul JSON, fisierul de input si fisierul de output.
Se poate folosi doar clasa string din STL.
Hashtable-ul se afla in atasament.
|