Thanks Lainz, works!
But I can not understand the problem with the original code and because it generates an exception.
jArray:=TJSONArray.Create();
jArray:=TJSONArray(jData);
this lines, in the first you create an object, in the second you change the pointer of the object, so you get a memory leak of the first object created.
jObject:= TJSONObject(jArray[i]);
try
sCampo:=jObject.Find(lowercase('sdescripcion')).Value;
rValor:=jObject.Find(lowercase('rvalor')).AsFloat;
ListBox1.AddItem(sCampo+': '+FormatFloat('0.00',rValor), nil);
finally
//FreeAndNil(jObject);
end;
here the same, you're not creating jObject, is just a reference to an item in the array, so you don't need to free it because it's inside a container: the container manages the array not you.
//FreeAndNil(jData); //here como exception
jArray.Free;
jArray is actually jData, with a different type cast, so you need to free only one.