reworking content
All checks were successful
learn org at code.softwareshinobi.com/linux.softwareshinobi.com/pipeline/head This commit looks good
All checks were successful
learn org at code.softwareshinobi.com/linux.softwareshinobi.com/pipeline/head This commit looks good
This commit is contained in:
@@ -0,0 +1,134 @@
|
||||
# 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.
|
||||
Reference in New Issue
Block a user