Ajuda Com Json

24/07/2023

0

Pessoal, boa noite.

Estou com uma dificuldade enorme com esse JSON

'{"equipamento":2,
"equipe":10,
"unidade_Industrial":4,
"hora_Final":0.630520833333333,
"hora_Inicial":0.672488425925926,
"horimetro_Final":0,
"horimetro_Inicial":0,
"data":"2023-07-24T00:00:00.000Z",
"observacoes":"",
"data_Final":"2023-07-20T00:00:00.000Z",
"data_Inicial":"2023-07-20T00:00:00.000Z",
"status_Envio":"PENDENTE",
"codigo_TB_Equipes_Atividades":4,
"diesel":0,
"descricao_Foto2":"",
"descricao_Foto1":"",
"codigo_TB_Configuracoes":1,
"protocolo":"2023-07-24 21:44:44",
"lista_ItemsCheckList":{"lista_Item_CheckList":{"ownsObjects":true,"listHelper":[
{"descricao":"Água motor (ºC)","codigo":1,"status":"cf","observacao":"","codigo_TB_Item":7},
{"descricao":"Alarme de Ré","codigo":2,"status":"cf","observacao":"","codigo_TB_Item":8},
{"descricao":"Buzina","codigo":3,"status":"cf","observacao":"","codigo_TB_Item":9},
{"descricao":"Caçamba levantada (Alerta)","codigo":4,"status":"na","observacao":"","codigo_TB_Item":10},
{"descricao":"Câmera de ré","codigo":5,"status":"na","observacao":"","codigo_TB_Item":11},
{"descricao":"Cinto de segurança","codigo":6,"status":"na","observacao":"","codigo_TB_Item":12},
{"descricao":"Comandos Hidráulicos","codigo":7,"status":"na","observacao":"","codigo_TB_Item":13},
{"descricao":"Consumo de combustível","codigo":8,"status":"na","observacao":"","codigo_TB_Item":14},
{"descricao":"Consumo de óleos","codigo":9,"status":"na","observacao":"","codigo_TB_Item":15},
{"descricao":"Correias","codigo":10,"status":"na","observacao":"","codigo_TB_Item":16},
{"descricao":"Direção","codigo":11,"status":"na","observacao":"","codigo_TB_Item":17},
{"descricao":"Esteiras","codigo":12,"status":"na","observacao":"","codigo_TB_Item":18},
{"descricao":"Extintor","codigo":13,"status":"na","observacao":"","codigo_TB_Item":19},
{"descricao":"Farol alto","codigo":14,"status":"na","observacao":"","codigo_TB_Item":20},
{"descricao":"Farol baixo","codigo":15,"status":"na","observacao":"","codigo_TB_Item":21},
{"descricao":"Filtro Seco (Ar)","codigo":16,"status":"na","observacao":"","codigo_TB_Item":22},
{"descricao":"Filtro Úmido (Óleo)","codigo":17,"status":"na","observacao":"","codigo_TB_Item":23},
{"descricao":"Freio de Emergência","codigo":18,"status":"na","observacao":"","codigo_TB_Item":24},
{"descricao":"Freio de mão","codigo":19,"status":"na","observacao":"","codigo_TB_Item":25},
{"descricao":"Freio de pé","codigo":20,"status":"na","observacao":"","codigo_TB_Item":26},
{"descricao":"Freio motor","codigo":21,"status":"na","observacao":"","codigo_TB_Item":27},
{"descricao":"Giroflex","codigo":22,"status":"na","observacao":"","codigo_TB_Item":28},
{"descricao":"Lâmina\/Bordas","codigo":23,"status":"na","observacao":"","codigo_TB_Item":29},
{"descricao":"Limpador de Para-brisa","codigo":24,"status":"na","observacao":"","codigo_TB_Item":30},
{"descricao":"Limpeza","codigo":25,"status":"na","observacao":"","codigo_TB_Item":31},
{"descricao":"Luz de Freio","codigo":26,"status":"na","observacao":"","codigo_TB_Item":32},
{"descricao":"Luz de ré","codigo":27,"status":"na","observacao":"","codigo_TB_Item":33},
{"descricao":"Óleo Transmissão (ºC)","codigo":28,"status":"na","observacao":"","codigo_TB_Item":34},
{"descricao":"Painel Instrumentos","codigo":29,"status":"na","observacao":"","codigo_TB_Item":35},
{"descricao":"Pneus","codigo":30,"status":"na","observacao":"","codigo_TB_Item":36},
{"descricao":"Pressão Óleo","codigo":31,"status":"na","observacao":"","codigo_TB_Item":37},
{"descricao":"Retrovisores","codigo":32,"status":"na","observacao":"","codigo_TB_Item":38},
{"descricao":"Roletes","codigo":33,"status":"na","observacao":"","codigo_TB_Item":39},
{"descricao":"Ruídos","codigo":34,"status":"na","observacao":"","codigo_TB_Item":40},
{"descricao":"Sensor de Proximidade","codigo":35,"status":"na","observacao":"","codigo_TB_Item":41},
{"descricao":"Setas","codigo":36,"status":"na","observacao":"","codigo_TB_Item":42},
{"descricao":"Strobo","codigo":37,"status":"na","observacao":"","codigo_TB_Item":43},
{"descricao":"Vazamentos","codigo":38,"status":"na","observacao":"","codigo_TB_Item":44},
{"descricao":"Vidros","codigo":39,"status":"na","observacao":"","codigo_TB_Item":45},
{"descricao":"Outros","codigo":40,"status":"na","observacao":"","codigo_TB_Item":46}
]}}}'

Quando tento transformar ele em array ele da um erro de cast (raised exception class EInvalidCast with message 'Invalid class typecast'.)
Quando dou um jv.tostring ele retorna todos os dados contidos em lista_ItemsCheckList.

function TDAOPDE.Salvar(LJsonRecebido: TJSONObject): TJSONObject;
var
qryConsulta_PDE : TMyQuery;
ProtocoLo : String;
ja: TJSONArray;
jv: TJSONValue;
begin
try
ProtocoLo := LJsonRecebido.GetValue<String>('protocolo');

try
jv := LJsonRecebido.Get('lista_ItemsCheckList').JsonValue;
ja := jv.TJSONParseOption as TJSONArray;


Alguém já passou por isso?
Marcelo Campagnaro

Marcelo Campagnaro

Responder

Posts

25/07/2023

Frank Hosaka

Eu não conheço o Delphi, mas eu sei um pouco de json. Ele é assim no PHP:
$teste='{"chave":"valor"}';
$array=json_decode($teste,true);
e ele retorna $array=["chave"=>"valor"]

O seu json é válido. Eu dei o nome de $teste para a string. No PHP, usei esse código:
$teste= // o json que você passou //;
$jteste=json_decode($teste);
$array_parcial=$jteste->lista_ItemsCheckList->lista_Item_CheckList->listHelper;
var_dump($array_parcial);
$array_global=json_decode($teste,true);
print_r($array_global);

Já o código Delphi que você passou, fiquei intrigado com a instrução
try
jv := LJsonRecebido.Get('lista_ItemsCheckList').JsonValue;
ja := jv.TJSONParseOption as TJSONArray;

estava imaginando assim .Get('listHelper') ou simplesmente nada assim .Get( )
Responder

25/07/2023

Natanael Ferreira

Creio que seu código precisa ir entrando dentro dos níveis do Json até chegar realmente no Array.

Seu código acessa o primeiro nível que é o primeiro "lista_ItemsCheckList" depois dele tem outro nível que é o "lista_ItemsCheckList" e depois que tem o array "listHelper".

Veja os níveis do seu Array:

....
"lista_ItemsCheckList": {
		"lista_Item_CheckList": {
			"ownsObjects": true,
			"listHelper": [{
					"descricao": "Água motor (ºC)",
					"codigo": 1,
					"status": "cf",
					"observacao": "",
					"codigo_TB_Item": 7
				},
.....
Responder

25/07/2023

Natanael Ferreira

Creio que seu código precisa ir entrando dentro dos níveis do Json até chegar realmente no Array.

Seu código acessa o primeiro nível que é o primeiro "lista_ItemsCheckList" depois dele tem outro nível que é o "lista_ItemsCheckList" e depois que tem o array "listHelper".

Veja os níveis do seu Array:

...
"lista_ItemsCheckList": {
		"lista_Item_CheckList": {
			"ownsObjects": true,
			"listHelper": [{
					"descricao": "Água motor (ºC)",
					"codigo": 1,
					"status": "cf",
					"observacao": "",
					"codigo_TB_Item": 7
				},
.....
Responder

25/07/2023

Natanael Ferreira

Creio que seu código precisa ir entrando dentro dos níveis do Json até chegar realmente no Array.

Seu código acessa o primeiro nível que é o primeiro "lista_ItemsCheckList" depois dele tem outro nível que é o "lista_ItemsCheckList" e depois que tem o array "listHelper".

Veja os níveis do seu Array:

"lista_ItemsCheckList": {
		"lista_Item_CheckList": {
			"ownsObjects": true,
			"listHelper": [{
					"descricao": "Água motor (ºC)",
					"codigo": 1,
					"status": "cf",
					"observacao": "",
					"codigo_TB_Item": 7
				},

Responder

25/07/2023

Arthur Heinrich

Ao utilizar a expressão:

ja := jv.TJSONParseOption as TJSONArray;

Voçê está tentando fazer um cast (mudança de datatype) entre a propriedade TJSONParseOption para a classe TJSONArray.

Segundo a documentação, o tipo da propriedade TJSONParseOption é uma enumeração: TJSONParseOption = (IsUTF8, UseBool, RaiseExc);

Logo, o cast que você propõe não funciona. Este datatype equivale a um inteiro, que pode assumir os valores 0, 1 e 2. Não dá para transformar isso em um array, muito menos em uma classe.
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar