Acessar item do Json

Estou tentando importar pedidos de venda de uma API, estou recebendo o arquivo json com seguinte estrutura. Não tem uma estrutura defina. O cabeçalho e o itens estão na mesma linha. O pedido e controlado pelo ID_CARGA, como faço para acessar todos os itens para montar o array? Tem como mudar estrutura? Segue exemplo:


[
    {
        "7030": "7030010036",
        "ID_GRADE": 9162,
        "VEICULO": 25,
        "ID_CARGA": "8820",
        "DT_SOL": "2020-12-10T03:00:00.000Z",
        "DT_EMB": "2020-12-11T03:00:00.000Z",
        "ENTREGA": "2020-12-12T03:00:00.000Z",
        "COLETA": "FRUTAL",
        "CIDADE": "BARRETOS",
        "CENTRAL_FAT": "7030RP",
        "CENTRAL_FAT_2": "GREGUS",
        "COD_REVENDA": "1024",
        "REVENDA_FATURAMENTO": "RAETIA",
        "COD": "7532",
        "COD_CCIP": "410010011",
        "COD_RED": "5003",
        "ROMA": "1000136",
        "DESCRICAO": "CERVEJA IMPERIO PILSEN LATA 473ML CX C/12",
        "PLTS": 16,
        "QTDE": 3520,
        "VENDA": 2992,
        "BONIF": 528,
        "PEDIDO_EPS": null,
        "SENIOR": null,
        "PRAZO": null,
        "TRANSPORTADORA": "TCI PROPRIO",
        "TIPO_FRETE": "IDA + VOLTA",
        "OBSERVACOES": "-",
        "PALETES_DE_FORRO": 0,
        "id_distribuidor": 4,
        "D2_DOC": "54518",
        "ID_STATUS_GRADE": null,
        "STATUS_GRADE": null,
        "PLACA_CAVALO": null,
        "PLACA_CARRETA_1": null,
        "PLACA_CARRETA_2": null,
        "MOTORISTA": null,
        "createdAt": "2020-12-11T15:37:55.000Z",
        "updatedAt": "2020-12-11T15:37:55.000Z"
    },
    {
        "7030": "7030010026",
        "ID_GRADE": 9164,
        "VEICULO": 0,
        "ID_CARGA": "8820",
        "DT_SOL": "2020-12-10T03:00:00.000Z",
        "DT_EMB": "2020-12-11T03:00:00.000Z",
        "ENTREGA": "2020-12-12T03:00:00.000Z",
        "COLETA": "FRUTAL",
        "CIDADE": "BARRETOS",
        "CENTRAL_FAT": "7030RP",
        "CENTRAL_FAT_2": "GREGUS",
        "COD_REVENDA": "1024",
        "REVENDA_FATURAMENTO": "RAETIA",
        "COD": "7555",
        "COD_CCIP": "410010023",
        "COD_RED": "5104",
        "ROMA": "1000126",
        "DESCRICAO": "CERVEJA IMPERIO PILSEN GFA 300ML RT CX C/24",
        "PLTS": 10,
        "QTDE": 800,
        "VENDA": 680,
        "BONIF": 120,
        "PEDIDO_EPS": null,
        "SENIOR": null,
        "PRAZO": null,
        "TRANSPORTADORA": "TCI PROPRIO",
        "TIPO_FRETE": "IDA + VOLTA",
        "OBSERVACOES": "-",
        "PALETES_DE_FORRO": 0,
        "id_distribuidor": 4,
        "D2_DOC": "54518",
        "ID_STATUS_GRADE": null,
        "STATUS_GRADE": null,
        "PLACA_CAVALO": null,
        "PLACA_CARRETA_1": null,
        "PLACA_CARRETA_2": null,
        "MOTORISTA": null,
        "createdAt": "2020-12-11T15:37:55.000Z",
        "updatedAt": "2020-12-11T15:37:55.000Z"
    },
    {
        "7030": "7030010116",
        "ID_GRADE": 9163,
        "VEICULO": 0,
        "ID_CARGA": "8820",
        "DT_SOL": "2020-12-10T03:00:00.000Z",
        "DT_EMB": "2020-12-11T03:00:00.000Z",
        "ENTREGA": "2020-12-12T03:00:00.000Z",
        "COLETA": "FRUTAL",
        "CIDADE": "BARRETOS",
        "CENTRAL_FAT": "7030RP",
        "CENTRAL_FAT_2": "GREGUS",
        "COD_REVENDA": "1024",
        "REVENDA_FATURAMENTO": "RAETIA",
        "COD": "600lager",
        "COD_CCIP": "410040013",
        "COD_RED": "5108",
        "ROMA": "0",
        "DESCRICAO": "CERVEJA IMPERIO LAGER GFA 600ML CX C/ 24 - RET",
        "PLTS": 2,
        "QTDE": 98,
        "VENDA": 84,
        "BONIF": 14,
        "PEDIDO_EPS": null,
        "SENIOR": null,
        "PRAZO": null,
        "TRANSPORTADORA": "TCI PROPRIO",
        "TIPO_FRETE": "IDA + VOLTA",
        "OBSERVACOES": "RETORNO DE REMESSA DE 2 PALETES CONJUNTO COMPELTO (NF 13649)",
        "PALETES_DE_FORRO": 0,
        "id_distribuidor": 4,
        "D2_DOC": "54518",
        "ID_STATUS_GRADE": null,

Amigo, não testei, mas talvez funcione dessa forma.


Local cJson := Self:GetContent()
Local aObj  := {}
//Definindo o conteúdo como JSON, e pegando o content 
//e dando um parse para ver se a estrutura está ok
Self:SetContentType("application/json")
oJson   := JsonObject():New()
cError  := oJson:FromJson(cJson)
//Se tiver algum erro no Parse, encerra a execução
IF .NOT. Empty(cError)
    SetRestFault(500,'Parser Json Error')
    lRet    := .F.
Else
aObj := oJson:GetJsonObject()
 For nI:= 1 to len(aObj)
 //acessando o array...
 Next
EndIF

Tive problemas ao utilizar a classe JsonObject com uma API parecida com essa, pelo que entendi ele não reconhece como json quando a resposta é um array, então fiz um ajuste na resposta mais ou menos assim:


oJson := JsonObject():New() 

cParser := oJson:FromJson( '{ "PEDIDO": ' + cRespAPI+ ' } ' ) 

For i := 1 to Len(oJson["PEDIDO"])
  //Acessa a descricao da sua API
  conout(oJson["PEDIDO"][i]["ID_CARGA"])
Next

Basicamente coloquei o array da resposta dentro de um atributo pra poder identificar como array na hora de parsear.

Ajustes feitos no for resolveram o problema! Muito obrigado pela ajuda de todos.