2016-11-13 76 views
0

我想一個JSON對象添加到其他的JSON對象在PHP中,我想這和許多其他的方法,但我不能找到正確的方法無法合併PHP 2個JSON對象,結果爲空

這是我有什麼:

$js_string1 = "{\"info\":[{\"thumb\":\"\",\"count\":1,\"date\":\"11/11/2016 4:05:28\",\"categories\":[null,null,null,null,null],\"sharing\":\"\",\"status\":\"private\",\"title\":\"Apple\",\"windows\":[{\"alwaysOnTop\":false,\"focused\":true,\"width\":1440,\"windowId\":825},{\"active\":false,\"audible\":false, \"height\":727,\"width\":1440,\"windowId\":825}],\"top\":26,\"type\":\"normal\",\"width\":1440}]}"; 

$js_string2 = "{\"thumb\":\"\",\"count\":1,\"date\":\"10/10/2010 5:07:30\",\"categories\":[null,null,null,null,null],\"sharing\":\"\",\"status\":\"private\",\"title\":\"Some Title\",\"windows\":[{\"alwaysOnTop\":false,\"focused\":true,\"width\":1024,\"windowId\":201},{\"active\":false,\"audible\":false, \"height\":500,\"width\":1024,\"windowId\":301}],\"top\":26,\"type\":\"normal\",\"width\":1024}"; 

$result = json_encode(array_merge(json_decode($js_string1, true),json_decode($js_string2, true))); 

預期的結果是:

{"info":[{"thumb":"","count":1,"date":"11/11/2016 4:05:28","categories":[null,null,null,null,null],"sharing":"","status":"private","title":"Apple","windows":[{"alwaysOnTop":false,"focused":true,"width":1440,"windowId":825},{"active":false,"audible":false, "height":727,"width":1440,"windowId":825}],"top":26,"type":"normal","width":1440}] }, {"thumb":"","count":1,"date":"10/10/2010 5:07:30","categories":[null,null,null,null,null],"sharing":"","status":"private","title":"Some Title","windows":[{"alwaysOnTop":false,"focused":true,"width":1024,"windowId":201},{"active":false,"audible":false, "height":500,"width":1024,"windowId":301}],"top":26,"type":"normal","width":1024}]} ]} 

五月有人解釋,並告訴我如何正確地做到這一點?因爲我嘗試了很多不同的方式,而且我無法找到正確的方法。

我想要做的只是增加$ js_string2至$ js_string1並保持相同的結構$ js_string1,是這樣的:

{ 「信息」:[{......},{$ js_string2 }]}

+0

'$ js_string1'和'$ js_string2'是無效的JSON字符串 – Federkun

+0

什麼的var_dump輸出(array_merge(json_decode($ js_string1,真),json_decode($ js_string2,真))) ?如果這是null,那麼合併或解碼jsons就有問題。 –

+0

是的,你是對的,json_last_error()返回JSON_ERROR_STATE_MISMATCH,但是什麼是錯的 – Fed

回答

2

你的代碼很好,兩個JSON字符串都沒有。他們最後還有一個「]}」。

執行您的代碼會產生警告array_merge(): Argument #1 is not an array。這應該讓你的事業。

編輯

array_merge創建包含一個新的數組(你的情況),第一和第二陣列的所有密鑰。這些密鑰是"info""thumb"。結果(同樣是JSON)看起來像{"info": ..., "thumb": ...}

你真正想要的是將第二個數組添加到第一個數組的信息數組中,即執行以下操作。

$result = json_decode($js_string1, true); 
$result["info"][] = json_decode($js_string2, true); 
+0

是的,你是對的! – Fed

+0

但即使我刪除了額外的「]}」,我仍然無法合併到相同的結構 – Fed

+0

是的,你不能,但你不需要,你所需要的就是,據我所知,添加第二個數組(js_string2)添加到第一個(js_string1)中包含的「info」列表中。我相應地更新了我的答案。 – Martin

1

只要你的JSON字符串是否有效(遺憾的是,它們包含在每個相應線程結束額外]},你可能只是做這樣的事情:

<?php 

    $data1    = json_decode($js_string1); 
    $data2    = json_decode($js_string2); 
    $data1->info[]  = $data2; //<== THIS WILL SET $data2 INTO 
            //<== THE "info" ARRAY OF $data1 

請注意,您的JSON字符串被刪除了一些無關的字符串,每個字符串的末尾都有一些無關的... :

<?php 

     $js_string1 = '{ 
         "info":[ 
           { 
            "thumb"   :"", 
            "count"   :1, 
            "date"   :"11/11/2016 4:05:28", 
            "categories" :[null,null,null,null,null], 
            "sharing"  :"", 
            "status"  :"private", 
            "title"   :"Apple", 
            "windows"  :[ 
                { 
                 "alwaysOnTop":false, 
                 "focused":true, 
                 "width":1440, 
                 "windowId":825 
                }, 
                { 
                 "active":false, 
                 "audible":false, 
                 "height":727, 
                 "width":1440, 
                 "windowId":825 
                } 
               ], 
            "top"   :26, 
            "type"   :"normal", 
            "width"   :1440 
           } 
           ] 
          }'; //]} 

     $js_string2 = '{ 
         "thumb"   :"", 
         "count"   :1, 
         "date"   :"10/10/2010 5:07:30", 
         "categories" :[null,null,null,null,null], 
         "sharing"  :"", 
         "status"  :"private", 
         "title"   :"Some Title", 
         "windows"  :[ 
            { 
             "alwaysOnTop":false, 
             "focused":true, 
             "width":1024, 
             "windowId":201 
            }, 
            { 
             "active":false, 
             "audible":false, 
             "height":500, 
             "width":1024, 
             "windowId":301 
            } 
           ], 
         "top"   :26, 
         "type"   :"normal", 
         "width"   :1024 
         }';  //]} 


     $data1   = json_decode($js_string1); 
     $data2   = json_decode($js_string2); 
     $data1->info[] = $data2; //<== THIS WILL SET $data2 
            //<== INTO THE "info" ARRAY OF $data1 

     var_dump($data1); 
     // YIELDS:: 
     object(stdClass)[4] 
      public 'info' => 
      array (size=2) 
       0 => 
       object(stdClass)[1] 
        public 'thumb' => string '' (length=0) 
        public 'count' => int 1 
        public 'date' => string '11/11/2016 4:05:28' (length=18) 
        public 'categories' => 
        array (size=5) 
         ... 
        public 'sharing' => string '' (length=0) 
        public 'status' => string 'private' (length=7) 
        public 'title' => string 'Apple' (length=5) 
        public 'windows' => 
        array (size=2) 
         ... 
        public 'top' => int 26 
        public 'type' => string 'normal' (length=6) 
        public 'width' => int 1440 
       1 => 
       object(stdClass)[5] 
        public 'thumb' => string '' (length=0) 
        public 'count' => int 1 
        public 'date' => string '10/10/2010 5:07:30' (length=18) 
        public 'categories' => 
        array (size=5) 
         ... 
        public 'sharing' => string '' (length=0) 
        public 'status' => string 'private' (length=7) 
        public 'title' => string 'Some Title' (length=10) 
        public 'windows' => 
        array (size=2) 
         ... 
        public 'top' => int 26 
        public 'type' => string 'normal' (length=6) 
        public 'width' => int 1024