Ваш вопрос и комментарии противоречивы. В вашем вопросе говорится, что вы используете Delphi 10.2.3, но ваши комментарии говорят, что вы используете XE5.
В Delphi 10.2.3 используйте Pairsустройство. В XE5 используйте TJSONObject.Sizeустройство.
Если вы читаете документацию для версии XE5 TJSONObject, она не имеет Countи Pairsсвойств, следовательно, ошибки, которые вы видите в своем внутреннем цикле. Вместо этого вы должны использовать TJSONObject.Sizeсвойство и var o: TJSONObject; a: TJSONArray; book: TJSONObject; p: TJSONPair; idx: integer; idy: integer; begin o := TJSONObject.ParseJSONValue(TEncoding.ASCII.GetBytes(Memo1.Lines.Text),0) as TJSONObject; try a := o.Get('colors').JsonValue as TJSONArray; for idx := 0 to pred(a.Size) do begin book := a.Get(idx).JsonValue as TJSONObject; for idy := 0 to pred(book.Size) do begin p := book.Get(idy); ShowMessage(p.JsonString.ToString + ':' + p.JsonValue.ToString); end; end; finally o.Free; end; end; метод, например, ваш внешний цикл уже используется, например:
TJSONArray
В качестве альтернативы, TJSONObjectи TJSONObjectв XE5, и в 10.2.3 есть Enumeratorподдержка, поэтому вы можете использовать for..inциклы вместо этого, например:
var
o: TJSONObject;
a: TJSONArray;
book: TJSONObject;
v: TJSONValue;
p: TJSONPair;
begin
o := TJSONObject.ParseJSONValue(TEncoding.ASCII.GetBytes(Memo1.Lines.Text),0) as TJSONObject;
try
a := o.Get('colors').JsonValue as TJSONArray;
for v in a do
begin
book := v as TJSONObject;
for p in book do
begin
ShowMessage(p.JsonString.ToString + ':' + p.JsonValue.ToString);
end;
end;
finally
o.Free;
end;
end;