Ya he encontrado la solución, era una tonteria, dejo aqui la solución por si le sirve a alguien:
Solo tenia que crear el objecto dentro del bucle.
El codigo quedaria asi :
Código Delphi
[-]begin
arr:=0;
With FormUnit1.Form1.QueHistoria do
begin
sql.Clear;
sql.Add('SELECT * FROM historial WHERE codigo=:referencia');
parambyname('referencia').Value:=referencia;
execsql;
end;
Array_lineas:=TJsonArray.Create;
Result:=TJsonObject.Create;
FormUnit1.Form1.QueHistoria.first;
Result.AddPair(TJsonPair.Create('Lineas',Array_lineas));
while (not FormUnit1.Form1.QueHistoria.EOF) do
begin
obj_linea:=TJsonObject.Create;
for I := 0 to FormUnit1.Form1.QueHistoria.FieldDefs.Count-1 do
begin
CollumnName := FormUnit1.Form1.QueHistoria.FieldDefs[i].Name;
Obj_Linea.AddPair(CollumnName,FormUnit1.form1.QueHistoria.Fields[i].Value);
arr:=i;
end;
array_lineas.Add(obj_linea);
FormUnit1.Form1.QueHistoria.next;
end;
end;
Gracias