Boa noite, pessoal.
Pelo que entendi tive o mesmo problema.
O código abaixo funcionou normalmente, pois a string Json contém um objeto:
local cJsonResult as char
local oJson as object
// JSON com um objeto simples
cJsonResult := '{"type":"payment", "status": "paid"}'
oJson := JsonObject():new()
oJson:fromJson(cJsonResult)
conout(oJson['status']) // paid
conout(oJson:status) // paid
Já este outro código não funcionou, pois a string Json contém um array de objetos:
local cJsonResult as char
local oJson as object
// JSON com um array contendo dois objetos simples
cJsonResult := '[{"type":"payment", "status": "paid"},{"type":"payment", "status": "waiting"}]'
oJson := JsonObject():new()
oJson:fromJson(cJsonResult)
conout(oJson[0]['status']) // nil
conout(oJson[0]:status) // nil
No inspetor de variáveis, a variável oJson fica como tipo J, não reconhecido e sem nenhuma propriedade.
Tentei encapsular esse array em uma propriedade de um objeto simples, dessa forma:
local cJsonResult as char
local oJson as object
// JSON com um array contendo dois objetos simples
cJsonResult := '{"retorno": [{"type":"payment", "status": "paid"},{"type":"payment", "status": "waiting"}] }'
oJson := JsonObject():new()
oJson:fromJson(cJsonResult)
conout(oJson['retorno']) // nil
conout(oJson:retorno) // erro
Porém, deu o mesmo erro informando que a propriedade 'retorno' não existe.
O componente JsonObject tem algum problema com relação à utilização de arrays?
Fabr, boa noite, você deseja retornar um JSON com diversos registros?
— Daniel Mendes 29 de Aug de 2019