Bom dia, Eu tenho um retorno do JSON que está em uma variavel String e quero pegar o value dele.... Esse é o meu JSON
{"error":{"code":400,"message":{"lang":"en-us","value":"Bad request: Error in parameter n_serie:Attribute \\"n_serie\\" not found in pedido_venda.inclui"}}}
quero só pegar a informação do value;
tentei fazer dessa maneira;
procedure TfrmPSyncBack.Button1Click(Sender: TObject);
var
jsonObj, jSubObj: TJSONObject;
já: TJSONArray;
jp, jSubPar: TJSONPair;
i, j: integer;
begin
jsonObj := TJSONObject.ParseJSONValue(TEncoding.ASCII.GetBytes(Memo1.Text), 0) as TJSONObject;
//dada a seguinte string em notação JSON que será convertida pela função ParseJSONValue
//em um objeto nativo do delphi do tipo TJSONObject
Memo1.Lines.Clear;
jp := TJSONPair.Create;
jp := jsonObj.Get(0); //pega o par zero
já := TJSONArray.Create;
já := (jp.JsonValue as TJSONArray); // do par zero pega o valor, que é array
//quantidade de pares do objeto
Memo1.Lines.Add('quantidade de elementos ' + IntToStr(já.Size));
jSubObj:= TJSONObject.Create;
jSubPar := TJSONPair.Create;
for i := 0 to já.Size - 1 do //itera o array para pegar cada elemento
begin
jSubObj := (já.Get(i) as TJSONObject); //pega cada elemento do array, onde cada
//elemento é um objeto, neste caso, em função da string JSON montada acima
Memo1.Lines.Add('');
Memo1.Lines.Add('No elemento ' + IntToStr(i) +
' a quantidade de pares do objeto é = ' + IntToStr(jSubObj.Size) ); //quantidade de pares do objeto
for j := 0 to jSubObj.Size - 1 do //itera o objeto para pegar cada par
begin
jSubPar := jSubObj.Get(j); //pega o par no índice j
//do par pega separado a chave e o valor usando Value
Memo1.Lines.Add(jSubPar.JsonString.Value + ' : ' + jSubPar.JsonValue.Value);
end;
end;
end;
mas no já := (jp.JsonValue as TJSONArray); eu tenho esse erro
First chance exception at $73F4A9F2. Exception class EInvalidCast with message 'Invalid class typecast'.
Pergunta
robinhocne
Bom dia,
Eu tenho um retorno do JSON que está em uma variavel String e quero pegar o value dele....
Esse é o meu JSON
{"error":{"code":400,"message":{"lang":"en-us","value":"Bad request: Error in parameter n_serie:Attribute \\"n_serie\\" not found in pedido_venda.inclui"}}}
quero só pegar a informação do value;
tentei fazer dessa maneira;
procedure TfrmPSyncBack.Button1Click(Sender: TObject); var jsonObj, jSubObj: TJSONObject; já: TJSONArray; jp, jSubPar: TJSONPair; i, j: integer; begin jsonObj := TJSONObject.ParseJSONValue(TEncoding.ASCII.GetBytes(Memo1.Text), 0) as TJSONObject; //dada a seguinte string em notação JSON que será convertida pela função ParseJSONValue //em um objeto nativo do delphi do tipo TJSONObject Memo1.Lines.Clear; jp := TJSONPair.Create; jp := jsonObj.Get(0); //pega o par zero já := TJSONArray.Create; já := (jp.JsonValue as TJSONArray); // do par zero pega o valor, que é array //quantidade de pares do objeto Memo1.Lines.Add('quantidade de elementos ' + IntToStr(já.Size)); jSubObj:= TJSONObject.Create; jSubPar := TJSONPair.Create; for i := 0 to já.Size - 1 do //itera o array para pegar cada elemento begin jSubObj := (já.Get(i) as TJSONObject); //pega cada elemento do array, onde cada //elemento é um objeto, neste caso, em função da string JSON montada acima Memo1.Lines.Add(''); Memo1.Lines.Add('No elemento ' + IntToStr(i) + ' a quantidade de pares do objeto é = ' + IntToStr(jSubObj.Size) ); //quantidade de pares do objeto for j := 0 to jSubObj.Size - 1 do //itera o objeto para pegar cada par begin jSubPar := jSubObj.Get(j); //pega o par no índice j //do par pega separado a chave e o valor usando Value Memo1.Lines.Add(jSubPar.JsonString.Value + ' : ' + jSubPar.JsonValue.Value); end; end; end;
mas no já := (jp.JsonValue as TJSONArray); eu tenho esse erro
First chance exception at $73F4A9F2. Exception class EInvalidCast with message 'Invalid class typecast'.
Link para o comentário
Compartilhar em outros sites
3 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.