Pagini: [1]   În jos
  Imprimă  
Ajutor Subiect: JSON parser  (Citit de 2042 ori)
0 Utilizatori şi 1 Vizitator pe acest subiect.
Joker1343
Strain


Karma: -1
Deconectat Deconectat

Mesaje: 1



Vezi Profilul
« : 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.
« Ultima modificare: Mai 11, 2015, 12:49:19 de către Apostol Vlad » Memorat
Dddarius95
Client obisnuit
**

Karma: 30
Deconectat Deconectat

Mesaje: 66



Vezi Profilul
« Răspunde #1 : Mai 11, 2015, 13:22:26 »

Pentru cine nu a inteles cerinta, dar vrea sa dea o mana de ajutor.. Gaseste detalii la
http://ocw.cs.pub.ro/courses/sd-ca/teme/teme-03 Smile) =)) Yahoo!
Memorat
Popescu_Silviu_Emil_321CA
Strain


Karma: 1
Deconectat Deconectat

Mesaje: 2



Vezi Profilul
« Răspunde #2 : Mai 11, 2015, 14:07:08 »

Si daca te mai prind pe aici, te paste-o depunctare   Banana  Fighting
Memorat
Dddarius95
Client obisnuit
**

Karma: 30
Deconectat Deconectat

Mesaje: 66



Vezi Profilul
« Răspunde #3 : Mai 11, 2015, 14:16:36 »

Silviu, presupun ca te adresai autorului acestui post. Oricum, mi s-a parut tare faza. Ar trebui sa ii dati macar 1p din 100p pentru initiativa Smile)
Memorat
Popescu_Silviu_Emil_321CA
Strain


Karma: 1
Deconectat Deconectat

Mesaje: 2



Vezi Profilul
« Răspunde #4 : Mai 11, 2015, 14:18:16 »

Normal, Blatabuz!   Weightlift
Memorat
Pagini: [1]   În sus
  Imprimă  
 
Schimbă forumul:  

Powered by SMF 1.1.19 | SMF © 2006-2013, Simple Machines