2016-11-13 8 views
0

ヌルですが、私はこれがあるは、PHPに2つのJSONオブジェクトをマージすることはできません、結果は私がこれと他の多くの方法を試してみました、私はPHPで他のJSONオブジェクトに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_string2に$ js_string1を追加し、維持することだけです}]}

+0

'$のjs_string1'と' $のjs_string2'はのvar_dumpの出力は(array_merge(json_decode($ js_string1、真)、json_decode($ js_string2、真)))とは何か有効なJSON文字列 – Federkun

+0

ではありません?これが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": ...}のようになります。

実際には、最初の配列の情報配列に2番目の配列を追加する、つまり次のようにします。

$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ストリングは、いくつかの外的なものが取り除かれていることに注意してください。]各ストリングの最後に... A Quick-Test Here

<?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 
関連する問題