#lang racket ; (require sugar) (define test-data '#hash(("id" . 12) ("name" . "butterfree") ("sprite" . "https://raw.githubusercontent.com/PokeAPI/sprites/master/sprites/pokemon/12.png") ("stats" . (#hasheq((base_stat . 60) (effort . 0) (stat . #hasheq((name . "hp") (url . "https://pokeapi.co/api/v2/stat/1/")))) #hasheq((base_stat . 45) (effort . 0) (stat . #hasheq((name . "attack") (url . "https://pokeapi.co/api/v2/stat/2/")))) #hasheq((base_stat . 50) (effort . 0) (stat . #hasheq((name . "defense") (url . "https://pokeapi.co/api/v2/stat/3/")))) #hasheq((base_stat . 90) (effort . 2) (stat . #hasheq((name . "special-attack") (url . "https://pokeapi.co/api/v2/stat/4/")))) #hasheq((base_stat . 80) (effort . 1) (stat . #hasheq((name . "special-defense") (url . "https://pokeapi.co/api/v2/stat/5/")))) #hasheq((base_stat . 70) (effort . 0) (stat . #hasheq((name . "speed") (url . "https://pokeapi.co/api/v2/stat/6/")))))) ("types" . (#hasheq((slot . 1) (type . #hasheq((name . "bug") (url . "https://pokeapi.co/api/v2/type/7/")))) #hasheq((slot . 2) (type . #hasheq((name . "flying") (url . "https://pokeapi.co/api/v2/type/3/")))))))) ; (define d (dict->list test-data)) ; or...you know...could convert from hash table to list? ; (hash? (car (hash-ref test-data "stats"))) ; #t --- BOOM! this gets us a hash table! ; (display (car (hash-ref test-data "stats"))) ; (list? (hash-ref test-data "stats")) ;; #t ;; "stats" and "types" AREN'T exactly nested hash tables! They're lists, with hash tables embedded in them! ;; SO! I need a way to test for if something is a LIST, and then if it is a LIST I think then I hash map through that! (define (inspector h) (hash-map h (lambda (k v) (if (list? v) (display (~a "HARK! THE VALUE FOR THE KEY ~"k"~ IS A LIST \n====\n")) (display (~a " key: " k "\nvalue: " v "\n=====\n"))))) h) ;;(inspector test-data) ;; NEXT STEPS -> https://stackoverflow.com/questions/13504302/racket-scheme-filtering (hash-ref test-data "stats") ; all stats (hash-ref (car (hash-ref test-data "stats")) 'base_stat) ; value for a given stat (hash-ref (hash-ref (car (hash-ref test-data "stats")) 'stat) 'name) ; name for a given stat (map (lambda (x) (displayln "t")) ;; need a way to not use car, but just hit every item in the sequence (hash-ref test-data "stats"))