Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

suelystonn

Obter variaveis de JSON automaticamente

Recommended Posts

Olá pessoal,

 

Tenho o seguinte JSON:

[technicalSpecification] => Array
                        (
                            [Tipo de Tela] => AMOLED
                            [Bateria] => 3000 mAh
                            [Linha] => Moto G
                            [Largura] => 74 mm
                            [Processador] => Qualcomm Snapdragon 625
                            [Peso] => 155 g
                            [Resolução] => 1920 x 1080 Pixels
                            [Entradas] => MicroSD
                            [Memória Interna] => 32 GB
                            [Funções da Câmera] => Auto HDR
                            [Recursos] => Bluetooth 4.2
                            [Chips] => Dual Chip
                            [Altura] => 150,2 mm
                            [Câmera Frontal] => 5.0 Megapixels Frontal
                            [Sistema Operacional] => Android
                            [Tipo] => Smartphone
                            [Tamanho da Tela] => 5.2 polegadas
                            [Núcleos] => Octa-Core (8 Núcleos)
                            [Velocidade do Processador] => 2.0 GHz
                            [Memória RAM] => 2 GB RAM
                            [Marca] => Motorola
                            [Modelo] => 5 Plus XT1683
                            [Proteção] => Gorilla Glass 3
                            [Câmera Traseira] => 12.0 Megapixels
                            [Definição] => Full HD
                            [Versão] => Nougat
                            [Internet] => 4G
                            [Profundidade] => 7,9 mm
                        )

 

Eu já consigo obter os dados utilizando:

<?
foreach ( $itens2 as $e ){

$marca = $e['marca'];
$linha = $e['linha'];
  ?>

Porém eu tenho que criar as variáveis para cada objeto e problema é que esses objetos são dinâmicos. Ex: as vezes pode não ter o campo [Versão],[Internet]. Assim como também pode ter outros não listados acima. Gostaria de saber se tem como eu pegar esses dados com seus respectivos valores e guardar em variaveis para tratar depois. Obrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites

não entendi muito bem a necessidade mas pesquisa aí variáveis variáveis, talvez seja o que precisa.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu dei uma pesquisada em variáveis variáveis mas não é isso que eu to buscando.

 

Vou tentar explicar melhor, para facilitar vou nomear o json.

 

[Definição] => Full HD
[Versão] => Nougat

 

[Definição][Versão] = Campos;

Full HDNougat = Seus respectivos valores;

 

Ok, agora acontece que meu json pode ter Campos diferentes a cada requisição. Então é isso q eu queria saber, como pegar automaticamente todos os campos e seus respectivos valores, sem precisar definir eles em variáveis, pois como falei os campos são variaveis e podem mudar a cada requisição. E se era possível criar variaveis para os campos e variaveis para os seus valores tbm para eu poder tratar os dados da forma q eu desejar.

 

 

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

mas o que tu vai fazer com esses dados? tem esses campos numa tabela e tu quer que seja automaticamente detectado os campos  que vem em cada json? se for isso o mysqli ou pdo por exemplo tem como trazer os nomes dos campos da tabela pra tu comparar com os rotulos do json e aí direciona. aqui no forum mesmo tem coisas sobre isso, pesquisa aí mysql nome de campos

se não é isso dê mais detalhes do que vais fazer com esses dados

Compartilhar este post


Link para o post
Compartilhar em outros sites

não seria só usar as variaveis criadas no foreach?

foreach($itens2 as $label => $valor){
    echo $label . ': ' . $valor;
}

 

se bem entendi deve ser alguma coisa assim que queres

Compartilhar este post


Link para o post
Compartilhar em outros sites

se você não sabe se o objeto terá valor ou não então faça um condicionamento ternário...

$modelo = ((empty($json['modelo'])) ? NULL : $json['modelo']);

Agora se você não sabe se o objeto em si existirá ou não, por mais dinamico que ele seja, você precisará recuperá-los de algum modo. Na sua situação, eu tentaria criar um condicionamento ternario para cada um dos objetos conhecidos.

$modelo = ((isset($json['modelo'])) ? NULL : $json['modelo']);
$versao = ((isset($json['versao'])) ? NULL : $json['versao']);
$chip   = ((isset($json['chip'])) ? NULL : $json['chip']);

e tendo isso em mente, bastaria aplicar um ECHO nas variaveis com o resultado do condicionamento.

Agora, se esse objeto json é 100% dinamico e desconhecido ao ponto que você NUNCA saberá qual será o nome do objeto, ai eu já não sei como lidar nessa situação

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por clovis.sardinha
      Estou em um impasse pois sei pouco de javascript. Estou fazendo um autocomplete com CI4 e Javascript.
      Consigo gerar, através do controllers/model do CI4 um arquivo em json, mas não consigo retorná-lo para o javascript para poder mostrar as opções para consulta. 
      O console.log mostra que estou obtendo o  json() { [native code] }.
      Segue os dois arquivos para ver se alguém me ajuda.
      //arquivo cidade.js async function carregar_cidade(valor) { if (valor.length >= 3) { //console.log("Pesquisar:" + valor); const dados = fetch('Testes/?cidade='+valor, { method: "get", headers: { "Content-Type": "application/json", "X-Requested-With": "XMLHttpRequest" } }); const resposta = (await dados).json; console.log(resposta); var html = "<ul class='list-group position-fixed'>"; html += "<li class='list-group-item'>" + resposta['cid_nome'] + "</li>"; html += "</ul>"; } } <?php //arquivo Testes.php namespace App\Controllers; use App\Models\CidadeModel; /** NÃO MANDAR PARA O SERVIDOR - APENAS TESTES DE FUNÇÕES E OUTROS ELEMENTOS DO CI4 */ class Testes extends BaseController{ protected $tbCidades; public function __construct(){ $this->tbCidades = new CidadeModel(); } public function index(){ $request = \Config\Services::request(); $client = \Config\Services::curlrequest(); $cidades=[]; if($get=$request->getGet()){ $cities=$get['cidade']; $cidadeFiltrada=$this->tbCidades->getCidByName($cities); $cidades= json_encode($cidadeFiltrada); //dd($cidades); } echo view('Testes/testes'); } public function salvar(){ $request = \Config\Services::request(); if($post=$request->getPost()){ dd($post); } } } <!doctype html> <html lang="pt-br"> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <!-- Bootstrap CSS --> <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3" crossorigin="anonymous"> <title>Autocomplete</title> </head> <body> <div class="container"> <h1 class="mt-4 mb-4">Formulário</h1> <form class="row g-3"> <div class="col-12"> <label for="cidade" class="form-label">Cidade</label> <input type="text" name="cidade" class="form-control" id="cidade" placeholder="Pesquisar cidade" onkeyup="carregar_cidade(this.value)"> </div> <span ></span> </form> </div> <!-- Optional JavaScript; choose one of the two! --> <!-- Option 1: Bootstrap Bundle with Popper --> <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.bundle.min.js" integrity="sha384-ka7Sk0Gln4gmtz2MlQnikT1wXgYsOg+OMhuP+IlRH9sENBO0LRn5q+8nbTov4+1p" crossorigin="anonymous"></script> <script src="assets/js/cidade.js"></script> </body> </html>
    • Por FabianoSouza
      Olá pessoal.
      Eu já utilizo o FOR JSON PATH para retornar o o resultado de uma consulta com JSON. Isso eu já sei fazer.
       
      O que preciso é criar uma função que receba um SELECT como parâmetro e retorne o resultado desse SELECT já formatado como JSON.
      Estou tentando isso, mas sem sucesso.
       
      A function dbo.fn_retornaJsonPath :
      (@String NVARCHAR(MAX)) RETURNS NVARCHAR(MAX) AS BEGIN BEGIN IF @String <> NULL SET @String = (SELECT @String AS jsonPath FOR JSON PATH) END BEGIN IF @String IS NULL SET @String = '[]' END RETURN @String END Forma de executar:
      SET @sql = 'SELECT ' SET @sql = @sql + ' dbo.fn_retornaJsonPath ((SELECT TT.tema FROM dbo.tabela AS TT WHERE TT.cd = CTT.id)) AS ''temas'' ' SET @sql = @sql + ' FROM dbo.minhaTab AS CTT ' EXEC(@sql) Mas não está rolando....
    • Por PresleyMenezes
      Olá pessoal, gostaria de saber como copiar o conteúdo de um campo json com muitos pais e filhos e colar em outro campo de pais e filhos do mesmo arquivo json?
       
      agradeço a ajuda de vocês.
      em anexo o arquivo json e o codigo que estou tentando fazer

       

       

       
       
       
       

       

       
    • Por Giovanird
      Olá a todos!
      Tenho uma api  Sala de Aula e dentro dela o id de cada aluno. Em outra api, API ALUNO,  tenho os dados de cada aluno:  nome, foto, endereço.
      Estou fazendo o foreach da api Sala de Aula e preciso também retornar os dados de cada aluno.
      Segue o código que não estou conseguindo desenvolver
      $sala = file_get_contents("https://api/sala?id=987"); $sala = json_decode($sala, true); $sala = $sala['data']; foreach ($sala as $resulsala){ $codigoaluno = $resulsala['idaluno']; $alunos = file_get_contents("https://api/alunos?id=$codigoaluno"); $alunos = json_decode($alunos, true); $alunos = $alunos['data']; foreach ($alunos as $resulalunos){ echo $resulalunos['nome']; echo $resulalunos['foto']; echo $resulalunos['rua']; } }  
    • Por kania
      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?
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.