# Json Data `jq` is your lightweight, flexible command-line JSON processor. It's built in portable C with zero runtime dependencies, making it simple to install and powerful for parsing JSON in Bash. ----- ### Demo Setup: QuizAPI This demo uses the [QuizAPI](https://quizapi.io/) to fetch JSON data. Obtain a free **API key** from their [client area](https://quizapi.io/clientarea/settings/token) to follow along. ----- ### Installing `jq` `jq` is easily installed via your system's package manager or direct download. * **Ubuntu/Debian:** `sudo apt-get install jq` * **Red Hat/Fedora:** `sudo dnf install jq` * **Arch Linux:** `sudo pacman -S jq` For other systems, refer to the [official `jq` download page](https://www.google.com/search?q=%5Bhttps://stedolan.github.io/jq/download/%5D\(https://stedolan.github.io/jq/download/\)). Verify your installation: ```bash jq --version ``` ----- ### Basic JSON Parsing with `jq` Once `jq` is installed and you have your QuizAPI key, you can start processing JSON. First, set your API key: ```bash API_KEY=YOUR_API_KEY_HERE # Replace with your actual key ``` Fetch questions using `curl`: ```bash curl "https://quizapi.io/api/v1/questions?apiKey=${API_KEY}&limit=10" ``` The raw output is hard to read. Pipe it to `jq` for beautifully formatted and colored JSON: ```bash curl "https://quizapi.io/api/v1/questions?apiKey=${API_KEY}&limit=10" | jq ``` This command makes the JSON output structured and easy to inspect. ----- ### Extracting Specific Elements To get only the first element from a JSON array, use `.[0]`: ```bash curl "https://quizapi.io/api/v1/questions?apiKey=${API_KEY}&limit=10" | jq '.[0]' ``` This will output only the first JSON object in the array. ----- ### Fetching Key Values Across an Array To extract the value of a specific key (e.g., `question`) from every object in a JSON array, use `.[].key`: ```bash curl "https://quizapi.io/api/v1/questions?apiKey=${API_KEY}&limit=10" | jq '.[].question' ``` This will return a list of all questions from the API response. ----- ### Integrating `jq` into a Bash Script Let's create a script to fetch a question and its answers, then display them. We'll use `jq` to parse specific fields and assign them to Bash variables. Create `quiz_script.sh`: ```bash touch quiz_script.sh ``` Open `quiz_script.sh` and add (remember to replace `YOUR_API_KEY_HERE`): ```bash #!/usr/bin/env bash # Your QuizAPI Key (replace YOUR_API_KEY_HERE with your actual key) API_KEY="YOUR_API_KEY_HERE" # Make an API call and get the first question object # Using -s for silent mode to suppress curl's progress meter QUIZ_DATA=$(curl -s "https://quizapi.io/api/v1/questions?apiKey=${API_KEY}&limit=1" 2>/dev/null) # Extract specific values using jq with raw output (-r) for Bash variables question=$(echo "${QUIZ_DATA}" | jq -r '.[0].question') answer_a=$(echo "${QUIZ_DATA}" | jq -r '.[0].answers.answer_a') answer_b=$(echo "${QUIZ_DATA}" | jq -r '.[0].answers.answer_b') answer_c=$(echo "${QUIZ_DATA}" | jq -r '.[0].answers.answer_c') answer_d=$(echo "${QUIZ_DATA}" | jq -r '.[0].answers.answer_d') # Output the question and answers echo " Question: ${question} A) ${answer_a} B) ${answer_b} C) ${answer_c} D) ${answer_d} " ``` Save, make executable, and run: ```bash chmod +x quiz_script.sh ./quiz_script.sh ``` The script will print a random question and its corresponding answers. For more advanced, interactive Bash quizzes, explore community projects that build upon these `jq` principles. ----- ### Conclusion `jq` empowers you to process **JSON** directly within your Bash terminal, facilitating seamless interaction with **REST APIs**. For deeper dives, consult the [official `jq` manual](https://www.google.com/search?q=%5Bhttps://stedolan.github.io/jq/manual/%5D\(https://stedolan.github.io/jq/manual/\)) and the [QuizAPI documentation](https://quizapi.io/docs/1.0/overview). > {notice} This content was inspired by a piece by softwareshinobi on Dev Team Six.