airbnb/lottie-android · error · JsonDataException

Expected END_ARRAY but was {} at path {}

Error message

Expected END_ARRAY but was {} at path {}

What it means

JsonUtf8Reader.endArray() peeks the next token and expects PEEKED_END_ARRAY (']'). If the actual token differs — for example, the stream has an extra element or the wrong delimiter — it throws JsonDataException with the actual token and current path. This fires when the parser finishes reading array elements but the JSON does not properly close the array.

Source

Thrown at lottie/src/main/java/com/airbnb/lottie/parser/moshi/JsonUtf8Reader.java:136

      pathIndices[stackSize - 1] = 0;
      peeked = PEEKED_NONE;
    } else {
      throw new JsonDataException("Expected BEGIN_ARRAY but was " + peek()
          + " at path " + getPath());
    }
  }

  @Override public void endArray() throws IOException {
    int p = peeked;
    if (p == PEEKED_NONE) {
      p = doPeek();
    }
    if (p == PEEKED_END_ARRAY) {
      stackSize--;
      pathIndices[stackSize - 1]++;
      peeked = PEEKED_NONE;
    } else {
      throw new JsonDataException("Expected END_ARRAY but was " + peek()
          + " at path " + getPath());
    }
  }

  @Override public void beginObject() throws IOException {
    int p = peeked;
    if (p == PEEKED_NONE) {
      p = doPeek();
    }
    if (p == PEEKED_BEGIN_OBJECT) {
      pushScope(JsonScope.EMPTY_OBJECT);
      peeked = PEEKED_NONE;
    } else {
      throw new JsonDataException("Expected BEGIN_OBJECT but was " + peek()
          + " at path " + getPath());
    }
  }

View on GitHub (pinned to 05ea92e903)

Solutions

  1. Use the exception's path to locate the malformed array in the JSON and fix its structure (ensure proper brackets and commas).
  2. Run the JSON through a standard JSON linter to catch structural errors.
  3. Re-download or re-export the animation file.
Defensive patterns

Strategy: try-catch

Try / catch

LottieTask<LottieComposition> task = LottieCompositionFactory.fromAsset(context, name);
task.addListener(result -> { /* success */ })
     .addFailureListener(e -> { /* JSON array structure error */ });

Prevention

When it happens

Trigger: The parser expects the closing ']' of an array but encounters a different token: a missing comma producing an unexpected value, extra elements beyond what the parser consumed, or a structural corruption that shifts the reader's position.

Common situations: Corrupted Lottie JSON with missing or misplaced array delimiters; truncated file; JSON edited by hand with comma or bracket errors.

Related errors


AI-assisted analysis of airbnb/lottie-android@05ea92e903 (2026-08-14). Data as JSON: /api/errors/c868de4adc89e5ad. Report an issue: GitHub.