簡體   English   中英

PHP json_decode問題

[英]PHP json_decode question

我正在嘗試使用json_decode組合一些json對象然后重新編碼它。 我的json看起來像:

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

我有一些這些json對象,並希望只為每個組合“segement”數組得到這樣的東西:

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

現在在我的PHP代碼中,我正在解碼json,將每個“segment”數組存儲到一個字符串中,然后編碼json。

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);
}

當我這樣做時,我收到一個錯誤:類stdClass的對象無法轉換為字符串

所以我嘗試將它們存儲在一個數組中:

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

這一次,我沒有得到錯誤,但它將我的整個組合json對象存儲在數組括號中。 我怎么能只返回JSON對象,而不是封裝在一個數組?

我認為一種方法是利用第二個參數json_decodeassoc

“當為TRUE時,返回的對象將被轉換為關聯數組。”

我發現通常處理關聯數組而不是stdClass類更容易。

$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>";

這首先產生Object版本,然后產生關聯數組:

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
                        )

                )

        )

)

我想我會做類似的事情,創建新的空白數組,解碼為關聯數組,抓取段成員並將它們拼接到新的空白數組中。 所以:

$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);
}

現在,您可以將此編碼為json,如下所示:

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

您的外部對象包含兩個名為“segment”的項目。 雖然這是合法的JSON,但是不可能讓PHP對象具有兩個具有相同名稱的不同項。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM