Ajuda Com Json
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?
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
Curtidas 0
Respostas
Frank Hosaka
24/07/2023
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( )
$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( )
GOSTEI 0
Natanael Ferreira
24/07/2023
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:
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 }, .....
GOSTEI 0
Natanael Ferreira
24/07/2023
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:
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 }, .....
GOSTEI 0
Natanael Ferreira
24/07/2023
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:
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 },
GOSTEI 0
Arthur Heinrich
24/07/2023
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.
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.
GOSTEI 0