Tenho a seguinte situação.
Recebo vários JSONs podendo ou não ser multidimensional, preciso atualizar uma determinada chave deste JSON, o problema é que algumas chaves podem ser duplicadas, bem como seus respectivos valores. Como estou tentando criar uma função genérica para navegar em qualquer JSON e modificar a chave em si, com estas duplicidades de chaves, estou tendo dificuldades em dizer ao código qual é chave que devo alterar.
Arquivo JSON Exemplo
{
"CREDITOR": {
"TAX": {
"TAC": 0.7
},
"ENABLE": "true",
"PRODUCTION": {
"email": "email@dominio.com",
"senha": "12457895",
"BASE_URL": "https://domino.com"
},
"HOMOLOGATION": {
"email": "email@dominio.com",
"senha": "12457895",
"BASE_URL": "https://domino.com"
},
"TARGET_VALUES": 5000000
}
}
Converto o JSON para array
$json = json_decode($json_string, true);
Função que criei até aqui
/**
* Encontra a chave correspondente dentro do JSON
*
* @param array $jsonArray - JSON a ser verificado
* @param string $keyFather - chave de entrada
* @param string $keyUpdate - chave que modificar
* @param string $valueUpdate - novo valor da chave
* @return string
*
*/
public static function searchKeyJson(array $jsonArray, string $keyFather, string $keyUpdate = null, $valueUpdate = null)
{
foreach ($jsonArray as $key => $value) {
if ($key == $keyFather && $keyUpdate == null) {
$jsonArray[$key] = $valueUpdate;
return $jsonArray;
}
if ($key == $keyFather && $keyUpdate != null) {
$jsonArray[$keyFather][$keyUpdate] = $valueUpdate;
return $jsonArray;
}
if (is_array($value)) {
if (($result = self::searchKeyJson($value, $keyFather, $keyUpdate, $valueUpdate)) !== false) {
if ($keyUpdate == null) {
return $result;
} else {
return $result;
}
}
}
}
return false;
}
Até modifico o valor, mais no final para salvar, ele não monta o JSON como original, ele caba ignorando a chave inicial no JSON de exmeplo "CREDITOR": {}
Retorno da função (notem que esta forma do padrão da original)
=> [
"TAX" => [
"TAC" => 0.7,
],
"ENABLE" => "true",
"PRODUCTION" => [
"email" => "teste",
"senha" => "12457895",
"BASE_URL" => "https://domino.com",
],
"HOMOLOGATION" => [
"email" => "email@dominio.com",
"senha" => "12457895",
"BASE_URL" => "https://domino.com",
],
"TARGET_VALUES" => 5000000,
]
Se eu percorrer o array e tentar modificar a chave em questão, ele muda todas as as chaves que tiverem no JSON porque tem duplicidade.
Como posso resolver isto com uma função global que sirva para qualquer padrão de JSON que eu tiver?