Ir para conteúdo
Fórum Script Brasil

Jorge Kania

Membros
  • Total de itens

    2
  • Registro em

  • Última visita

Sobre Jorge Kania

Jorge Kania's Achievements

0

Reputação

  1. Olá noite Frank, obrigado por responder. Vamos lá, vou detalhar melhor o que estou tentando fazer. A aplicação Backend esta em uma API em Laravel 9, com banco de dados Mysql e o Front em Vue.js 3. No banco de dados, existem várias tabelas com colunas do tipo jsonb. O que preciso fazer é manipular este campo jsonb no PHP, para isto pensei no seguinte. - Ter uma função genérica já que estes campos jsonb não tem um json igual em cada; - A função precisa poder percorrer o json (já convertido em array para trabalhar no php) e encontrara chave especifica para poder modifica-la No exemplo acima, eu cheguei a conseguir modificar a chave email da chave pai PRODUCTION efetuando chamada searchKeyJson($jsonArray, , , "VALOR MODIFICADO") Sendo que o parâmetro $keyUpdate é facultativo, já que posso precisar alterar um chave que esta em primeiro nível no json. Funcionou a modificação para este exemplo de json/array, mais não funciona em todos os casos, pois como monto as chaves na $jsonArray[$keyFather][$keyUpdate] = $valueUpdate; ele se perde quando não encontra as referencias conforme a profundidade do array. A ideia inicial era que eu pudesse passar apenas a chave em si que quero manipular (exemplo: email), mais não funcionaria porque como no json do exemplo, eu tenho duas chaves e-mail, uma no PRODUCTION e outra no HOMOLOGATION, logo ou vai modificar todas as chaves, ou vai modificar apenas a primeira que encontrar. Ai estou pesquisando para ver como posso resolver este pepinão (hehehe), tendo em vista que estes campos jsonb do banco tem configuração do sistema importantes que precisam ser manipulados em um front, não da para ficar ajustando eles não mão sempre que precisar.
  2. 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?
×
×
  • Criar Novo...