Demystifying jq Array Indexing: Extracting Data from JSON Arrays

Dec 03, 2025 · Programming · 14 views · 7.8

Keywords: jq | JSON | array indexing | data extraction

Abstract: This article explores the common jq error 'Cannot index array with string' when working with JSON arrays, providing a detailed solution based on iteration syntax. It delves into jq's array indexing mechanisms, explaining step-by-step how to correctly extract data from nested structures and discussing best practices to avoid similar errors.

Introduction

When working with JSON data using the command-line tool jq, users often encounter the error message "jq: error: Cannot index array with string". This typically occurs when attempting to index an array as if it were an object. In this article, we will dissect this common issue and provide a robust solution.

Understanding the Error

The error arises because jq expects a string key to index an object, but when the data structure is an array, it requires numerical indices or iteration. In the provided example, the JSON file contains an outer array, and the user tried to use .aux[] | .def, which fails because .aux is accessed from the array element incorrectly.

Solution: Using jq Iteration Syntax

To correctly extract data from nested arrays, jq provides the iteration operator []. The solution is to iterate over the outer array first, then the inner array. The correct command is:

jq '.[].aux[].def' file.json

Here, .[] iterates over each element in the outer array, .aux[] iterates over the aux array within each element, and .def extracts the def property.

Step-by-Step Example

Consider the JSON file myfile.json with content:

[{
    "id": 123,
    "name": "John",
    "aux": [{
        "abc": "random",
        "def": "I want this"
    }],
    "blah": 23.11
}]

Running the command:

jq -r '.[].aux[].def' myfile.json

will output:

I want this

The -r flag is used for raw output, removing the double quotes.

Conclusion

Mastering jq's iteration syntax is key to efficiently querying JSON data. By understanding how to properly index arrays and objects, users can avoid common errors and extract the desired information seamlessly. This content is based on the best answer from the Q&A data, aiming to provide in-depth technical insights.

Copyright Notice: All rights in this article are reserved by the operators of DevGex. Reasonable sharing and citation are welcome; any reproduction, excerpting, or re-publication without prior permission is prohibited.