Olá,
Na verdade o funcionamento está correto, quando você coloca um valor no JsonObject que nasce como um array, você não vai conseguir utilizar o HasProperty
diretamente nele, afinal ele é um array que contém um JSON em uma de suas posições, nesse exemplo, na primeira posição.
Abaixo o seu exemplo, demonstrando como o HasProperty
deve ser usado numa situação como essa:
//-------------------------------------------------------------------
/*/{Protheus.doc} jsonArray
Exemplo de uso do JsonObject com array
@author Daniel Mendes
@since Apr 09, 2024
@version 1.0
/*/
//-------------------------------------------------------------------
user function jsonArray()
local jJson := JsonObject():New() as json
local lHasProperty as logical
//Nesse caso, o seu JSON é um array
jJson:fromJSON('[{"teste":"teste1"}]')
//Logo:
lHasProperty := jJson:HasProperty("teste") // Aqui esta retornando .F. e está correto
ConOut(lHasProperty)
//E:
jJson[1]:HasProperty("teste") // Aqui esta retornando .T. e está correto
ConOut(lHasProperty)
// Se eu retiro os colchetes:
jJson:fromJSON('{"teste":"teste1"}')
jJson:HasProperty("teste") // Aqui esta retornando .T. e também está correto
ConOut(lHasProperty)
return
Caso você tenha dúvidas do funcionamento, criei o mesmo exemplo em Javascript que monstra que ambas as linguagens tem o mesmo comportamento quando trata-se de um JSON que inicia como um array:
let jJson = {};
let lHasProperty = false;
//Nesse caso, o seu JSON é um array
jJson = JSON.parse('[{"teste":"teste1"}]');
//Logo:
lHasProperty = jJson.hasOwnProperty("teste") // Aqui esta retornando false e está correto
console.log(lHasProperty);
//E:
lHasProperty = jJson[0].hasOwnProperty("teste") // Aqui esta retornando true e está correto
console.log(lHasProperty);
// Se eu retiro os colchetes:
jJson = JSON.parse('{"teste":"teste1"}')
lHasProperty = jJson.hasOwnProperty("teste") // Aqui esta retornando true e também está correto
console.log(lHasProperty);
Você pode executá-lo direto no navegador ou por esse exemplo online: https://onecompiler.com/javascript/429u3m3y5