PHP json_decode soru

2 Cevap php

Birkaç json nesneleri birleştirmek ve sonra yeniden kodlamak için json_decode kullanmaya çalışıyorum. benim json gibi görünüyor:

{
    "core": {
        "segment": [
            {
                "id": 7,
                "name": "test1" 
            },
            {
                "id": 4,
                "name": "test2" 
            } 
        ] 
    }
}

ben bu json nesneleri birkaç tane var ve böyle bir şey almak için her biri için sadece "bölüt" dizilerini birleştirmek istiyorum:

{
    "segment": [
        {
            "id": 7,
            "name": "test1" 
        },
        {
            "id": 4,
            "name": "test2" 
        } 
    ],
    "segment": [
        {
            "id": 5,
            "name": "test3" 
        },
        {
            "id": 8,
            "name": "test4" 
        } 
    ]
}

şu anda benim php kodu, ben bir dizeye her "segment" dizi depolama, json çözme ediyorum, ve sonra json kodlayan.

public function handleJSON($json){
    	$decodeData = json_decode($json);
    	$segment =$decodeData->core;
    	return $segment;
}

public function formatJSON(){
        $segments = "";
    for ($i = 0; $i < count($json);$i++)
        {
          $segments .= handleJSON($json[$i]);
        }
    echo json_encode($segments);
}

when i do this, i receive an error : Object of class stdClass could not be converted to string

Eğer öyleyse o zaman ben bir dizide saklayarak kullanarak çalıştı:

public function formatJSON(){
        $segments = array();
    for ($i = 0; $i < count($json);$i++)
        {
          $segments[$i] = handleJSON($json[$i]);
        }
    echo json_encode($segments);
}

Bu sefer, ben bir hata alamadım, ama bu dizi parantez içinde benim tüm kombine json nesnesini depolar. nasıl ben sadece bir dizide kapsüllü olmadan, JSON nesnesi dönmek olabilir?

2 Cevap

Ben bir yaklaşım ikinci parametre yararlanmak olacağını düşünüyorum json_decode, assoc:

"When TRUE, returned objects will be converted into associative arrays."

Ben genellikle ilişkisel diziler yerine stdClass sınıf ile başa çıkmak için daha kolay bulabilirsiniz.

$str = '{
   "core": {
        "segment": [
            {
                "id": 7,
                "name": "test1" 
            },
            {
                "id": 4,
                "name": "test2" 
            } 
        ] 
    }
}';
print "<pre>";
print_r(json_decode($str));
print "</pre>";
print "<pre>";
print_r(json_decode($str,true));
print "</pre>";

Bu ilk nesne sürümü, daha sonra ilişkilendirilebilir bir dizi oluşturur:

stdClass Object
(
    [core] => stdClass Object
        (
            [segment] => Array
                (
                    [0] => stdClass Object
                        (
                            [id] => 7
                            [name] => test1
                        )

                    [1] => stdClass Object
                        (
                            [id] => 4
                            [name] => test2
                        )

                )

        )

)
Array
(
    [core] => Array
        (
            [segment] => Array
                (
                    [0] => Array
                        (
                            [id] => 7
                            [name] => test1
                        )

                    [1] => Array
                        (
                            [id] => 4
                            [name] => test2
                        )

                )

        )

)

Ben, böyle bir şey yapmak, yeni boş bir dizi oluşturmak, gibi ilişkisel dizi çözmek, bölüm üyelerini dışarı kapmak ve yeni boş diziye kesikler düşünüyorum. Yani:

$segments = array();
// assuming you had a bunch of items in the $strings array
foreach ($strings as $str) {
  $item = json_decode($str,true);
  $segments = array_merge($item['core']['segment], $segments);
}

Şimdi, böyle json için bu kodlamak yapabilirsiniz:

$final_json = json_encode(array('segments'=>$segments));

Sizin dış nesne "segment" adlı iki öğe içerir. Bu yasal JSON ise aynı isimde iki farklı öğeleri ile bir PHP nesne olması mümkün değildir.