Convert multi array to json Multi Array

Asked

Viewed 47 times

0

Through a print_r, I am printing the array (object)$all`, and am getting the following array multidimensional:

Array
(
    [0] => Produtos Object
        (
            [idProduto:Produtos:private] => 1
            [tipo:Produtos:private] => mp
            [modelo:Produtos:private] => F540 2 BAN.PNEU. 100 X 60
            [bandejas:Produtos:private] => 2
            [peso:Produtos:private] => 0
            [prensagem:Produtos:private] => 0
            [precoUnitario:Produtos:private] => 6500
            [comprimento:Produtos:private] => 100
            [largura:Produtos:private] => 60
            [cabo:Produtos:private] => 0
            [ligacao:Produtos:private] => n
            [potencia:Produtos:private] => 0
            [consumo:Produtos:private] => 0
            [corrente:Produtos:private] => 0
            [disjuntor:Produtos:private] => 0
            [descricao:Produtos:private] => 
Valor promocional limitado frete grátis ,para SP ,RJ ,MG ,ES. Os demais será cobrado apenas de SP para sua cidade ,valor de 500,00 ,a ser pago na entrega .



MAQUINA TOTALMENTE INDUSTRIAL E 100% NACIONAL .PRODUÇÃO DE ATÉ MIL PÇS POR DIA EM HORÁRIO NORMAL DE TRABALHO ,SISTEMA DIGITAL AUTOMATIZADO DE ÚLTIMA GERAÇÃO , SISTEMA PNEUMÁTICO COMPACTO E UNIFORME RECEBENDO A MESMA PRESSÃO EM TODA ÁREA DE ESTAMPAGEM, EVITANDO ASSIM OS SOMBREAMENTOS E EFEITOS FANTASMA NA ESTAMPA , SISTEMA DE RESISTÊNCIA DE ALTA QUALIDADE A MELHOR DO MERCADO AÇO INOX 304 , DANDO UMA VIDA ÚTIL MUITO SUPERIOR AS DEMAIS DO MERCADO , E FÁCIL TROCAS DAS RESISTÊNCIAS NÃO SENDO NECESSÁRIO TÉCNICO NO LOCAL , COM APENAS 4 PARAFUSOS O CLIENTE MESMO FAZ A TROCA, AS DEMAIS A RESISTÊNCIA É FUNDIDA NA CHAPA DE ALUMÍNIO SENDO IMPOSSÍVEL A TROCA APENAS DAS RESISTÊNCIAS , TEMOS TODAS AS PÇS DA PRENSA EM VALORES BEM ACESSÍVEIS. 
            [estoque:Produtos:private] => 7
            [freteGratis:Produtos:private] => s
            [bloqueado:Produtos:private] => n
        )

    [1] => Produtos Object
        (
            [idProduto:Produtos:private] => 2
            [tipo:Produtos:private] => mp
            [modelo:Produtos:private] => F540 2 BAN.PNEU.80X100 A VISTA BOLETO PAGSEGURO
            [bandejas:Produtos:private] => 2
            [peso:Produtos:private] => 190
            [prensagem:Produtos:private] => 300
            [precoUnitario:Produtos:private] => 7500
            [comprimento:Produtos:private] => 70
            [largura:Produtos:private] => 100
            [cabo:Produtos:private] => 6
            [ligacao:Produtos:private] => b
            [potencia:Produtos:private] => 7500
            [consumo:Produtos:private] => 3
            [corrente:Produtos:private] => 35
            [disjuntor:Produtos:private] => 40
            [descricao:Produtos:private] => MAQUINA TOTALMENTE INDUSTRIAL E 100% NACIONAL .PRODUÇÃO DE ATÉ MIL PÇS POR DIA EM HORÁRIO NORMAL DE TRABALHO ,SISTEMA DIGITAL AUTOMATIZADO DE ÚLTIMA GERAÇÃO , SISTEMA PNEUMÁTICO COMPACTO E UNIFORME RECEBENDO A MESMA PRESSÃO EM TODA ÁREA DE ESTAMPAGEM, EVITANDO ASSIM OS SOMBREAMENTOS E EFEITOS FANTASMA NA ESTAMPA , SISTEMA DE RESISTÊNCIA DE ALTA QUALIDADE A MELHOR DO MERCADO AÇO INOX 304 , DANDO UMA VIDA ÚTIL MUITO SUPERIOR AS DEMAIS DO MERCADO , E FÁCIL TROCAS DAS RESISTÊNCIAS NÃO SENDO NECESSÁRIO TÉCNICO NO LOCAL , COM APENAS 4 PARAFUSOS O CLIENTE MESMO FAZ A TROCA, AS DEMAIS A RESISTÊNCIA É FUNDIDA NA CHAPA DE ALUMÍNIO SENDO IMPOSSÍVEL A TROCA APENAS DAS RESISTÊNCIAS , TEMOS TODAS AS PÇS DA PRENSA EM VALORES BEM ACESSÍVEIS. 
www.topuhrens.de




            [estoque:Produtos:private] => 8
            [freteGratis:Produtos:private] => n
            [bloqueado:Produtos:private] => n
        )

it is obvious that this array is much more extensive. However, 2 results are enough for me to ask my question.

I need to do

echo json_encode($todos, JSON_FORCE_OBJECT);

Hoping to convert the result into JSON But I’m getting:

{"0":{},"1":{},"2":{},"3":{},"4":{},"5":{},"6":{},"7":{},"8":{},"9":{},"10":{},"11":{},"12":{},"13":{},"14":{},"15":{},"16":{},"17":{},"18":{},"19":{},"20":{},"21":{},"22":{},"23":{},"24":{},"25":{},"26":{},"27":{},"28":{},"29":{},"30":{},"31":{},"32":{},"33":{},"34":{},"35":{},"36":{},"37":{},"38":{},"39":{},"40":{},"41":{},"42":{},"43":{},"44":{},"45":{},"46":{},"47":{},"48":{},"49":{},"50":{},"51":{},"52":{},"53":{},"54":{},"55":{},"56":{},"57":{},"58":{},"59":{},"60":{},"61":{},"62":{},"63":{},"64":{},"65":{},"66":{},"67":{},"68":{},"69":{},"70":{},"71":{},"72":{},"73":{},"74":{},"75":{},"76":{},"77":{},"78":{},"79":{},"80":{},"81":{},"82":{},"83":{},"84":{},"85":{},"86":{},"87":{},"88":{},"89":{},"90":{},"91":{},"92":{},"93":{}}

As a result of jSon.

It seems that the arrays internal are not being populated in conversion.

Where am I going wrong?

  • Your problem is that the attributes of your objects are private. You can leave publics (not recommend) or create a function within each one that returns the data and call it.

  • Try adding this function to your class public function jsonSerialize()
 {
 return get_object_vars($this);
 }, I think it might work. https://stackoverflow.com/questions/6613792/how-do-i-json-encode-private-properties-in-php

  • but even if they are private, what comes to json_encode is the return of a method, not a direct access to class attributes.

  • gives null as answer; I am doing so: echo json_encode(get_object_vars($all));

  • I believe that the function should be within the class itself, maybe from the outside I can’t. I made a gambit here: public function toArray()
 {
 return (array) $this;
 } that way you can call it json_encode($obj->toArray())

  • so it worked: echo json_encode(serialize($all));. But there’s a text field that has html in it. As in one of them there is a link, the rest below is all as link. How to resolve?

  • I think it’s just visual. If you want to see the result as it comes from php without rendering html just put your result between <pre>

Show 3 more comments

1 answer

0

Your problem is that the attributes are private and json_encode cannot extract the values.

I see some solutions:

 json_encode(serialize(get_object_vars($x)));

 json_encode((array) $x);

You could add a function to your object that returns from the data:

public function toArray() { return (array) $this; }
//chamando assim:
json_encode($obj->toArray())
  • as I said, json_encode(serialize($x)); solved it. However, I have a text field that accepts html. then, in one of them, was placed a href closed properly. However, below it, and in all the result of the json was with a giant link. Is there a problem?

Browser other questions tagged

You are not signed in. Login or sign up in order to post.