2017-07-03 182 views
1

我有一个问题需要加入或合并两个或两个以上的JSON文件..联合两个或两个以上的JSON文件

迄今为止这里是我的代码:

//first 
    $url1="https://www.zopim.com/api/v2/chats"; 
    $ch1 = curl_init(); 
    curl_setopt($ch1, CURLOPT_URL, $url1); 
    curl_setopt($ch1, CURLOPT_USERPWD, "$username:$password"); 
    curl_setopt($ch1, CURLOPT_HTTPAUTH, CURLAUTH_BASIC); 
    curl_setopt($ch1, CURLOPT_SSL_VERIFYHOST, 0); 
    curl_setopt($ch1, CURLOPT_SSL_VERIFYPEER, 0); 
    curl_setopt($ch1, CURLOPT_RETURNTRANSFER, true); 
    $output1 = curl_exec($ch1); 
    $info1 = curl_getinfo($ch1); 
    curl_close($ch1); 

    $chats1 = json_decode($output1,true); 

    //second 
    $url2="https://www.zopim.com/api/v2/chats?page=2"; 
    $ch2 = curl_init(); 
    curl_setopt($ch2, CURLOPT_URL, $url2); 
    curl_setopt($ch2, CURLOPT_USERPWD, "$username:$password"); 
    curl_setopt($ch2, CURLOPT_HTTPAUTH, CURLAUTH_BASIC); 
    curl_setopt($ch2, CURLOPT_SSL_VERIFYHOST, 0); 
    curl_setopt($ch2, CURLOPT_SSL_VERIFYPEER, 0); 
    curl_setopt($ch2, CURLOPT_RETURNTRANSFER, true); 
    $output2 = curl_exec($ch2); 
    $info2 = curl_getinfo($ch2); 
    curl_close($ch2); 

    $chats2 = json_decode($output2,true); 



    $r = []; 
    if(is_array($chats1) && is_array($chats2)) 
    { 
     foreach($chats1 as $key => $array) 
     { 
      $r[$key] = array_merge($chats2[$key], $array); 
     } 
    } 
    else 
    { 
    echo 'problem with json'; 
    } 
    echo json_encode($r, JSON_UNESCAPED_SLASHES); 

,但我遇到了一个错误: enter image description here

这里的44号错误行: enter image description here

希望你可以帮我或你有一个更好的合作德或登录本一个..喜欢使用的foreach ...

我也想使由数生成的链接自动样?页= 1?页= 2,依此类推......

这里的我的JSON: json1 enter image description here

和json2: enter image description here

+0

请提供你的'array'。 –

+0

等..我会发布它... – ivor

+0

@JaydeepMor isend截图..JSON文件太长... – ivor

回答

0

我已创建两个小json为加入吧!检查下面,

JSON - 1

{ 
    "chats": [ 
     { 
      "comment": null, 
      "triggered_response": true, 
      "visitor": { 
       "phone": "" 
      }, 
      "session": { 
       "city": "Moncton", 
       "end_date": "2017-07-03", 
       "ip": "99.240.22.84" 
      }, 
      "duration": "32", 
      "agent_names": { 
       "name": "test" 
      } 
     } 
    ] 
} 

JSON - 2

{ 
    "chats": [ 
     { 
      "comment": null, 
      "triggered_response": true, 
      "visitor": { 
       "phone": "" 
      }, 
      "session": { 
       "city": "Moncton1", 
       "end_date": "2017-08-03", 
       "ip": "99.240.22.85" 
      }, 
      "duration": "321", 
      "agent_names": { 
       "name": "test1" 
      } 
     } 
    ] 
} 

现在我加入,使用array_merge_recursive

PHP

// $json is first json encoded string same as $json1 is second encoded string. 
$merge_array = array_merge_recursive(json_decode($json,true),json_decode($json1,true)); 

JSON编码输出

{ 
    "chats": [ 
    { 
     "comment": null, 
     "triggered_response": true, 
     "visitor": { 
      "phone": "" 
     }, 
     "session": { 
      "city": "Moncton", 
      "end_date": "2017-07-03", 
      "ip": "99.240.22.84" 
     }, 
     "duration": "32", 
     "agent_names": { 
      "name": "test" 
     } 
    }, 
    { 
     "comment": null, 
     "triggered_response": true, 
     "visitor": { 
      "phone": "" 
     }, 
     "session": { 
      "city": "Moncton1", 
      "end_date": "2017-08-03", 
      "ip": "99.240.22.85" 
     }, 
     "duration": "321", 
     "agent_names": { 
      "name": "test1" 
     } 
    } 
    ] 
} 
+0

如何使用uising foreach生成json文件名的编号... – ivor

+0

为什么你要'foreach'。 –

+0

该网址是自动生成的...它增加像?page = 2等... – ivor

0

如果两个阵列结构同样在这里,您通过$ chats2 [$关键]作为array_merge字符串();所以发生错误

$res_arr = array_merge($chats2,$chats1); 
array_values($res_arr); 

$r = []; 
if(!empty($res_arr)) 
{ 
    foreach($res_arr as $key => $array) 
    { 
     $r[$key] = $array; 
    } 
} 
else 
{ 
    echo 'problem with json'; 
} 
echo json_encode($r); 
+0

如何在foreach上使用它?... – ivor

+0

请尝试我更新的答案,并让我知道如果有任何问题 –

0

你可以这样做:

$user = array(); 
$user[] = json_decode($json1,true); 
$user[] = json_decode($json2,true); 
$json_merge = json_encode($user); 
0
$finalArray = []; 
$finalArray[] = json_decode($json1,true); 
$finalArray[] = json_decode($json2,true); 
$mergedJSON = json_encode($finalArray); 

对于同一阵列结构,你可以使用 array_merge($array1, $array2) 方法&然后使用 json_encode()

例子:

$mergedArray = array_merge($array1, $array2); 
$mergedJSON = json_encode($mergedArray);