Assuming that the mesh primitive uses TRIANGLES ("mode": 4), then every three indices represent a triangle. So triangles A, B, and C would have indices of vertices:
Where a1 is the index of a vertex in the primitive’s vertex attributes. This arrangement allows vertices to be reused by multiple triangles, reducing space and improving performance. When no indices are given, every three sequential vertices in the vertex attributes form a new triangle, and vertices cannot be reused. This is sometimes called “triangle soup.”
Hardware APIs like OpenGL and Vulkan have these concepts built in; you don’t necessarily have to write code that looks up each triangle like that.