2017-07-03 2 views
1

J'ai un problème besoin de se joindre ou fusionner deux ou plusieurs fichiers JSON ..Joint deux ou plusieurs fichiers JSON

jusqu'à présent, voici mon code:

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

mais je rencontre une erreur: enter image description here

est ici numéro 44 ligne d'erreur: enter image description here

Espérons que vous pouvez me aider ou vous avez une bien meilleure collaboration de connexion ou pour celui-ci .. comme l'utilisation de foreach ...

Je veux aussi faire l'auto de lien généré par numéro comme? page = 1,? page = 2 et ainsi de suite ...

Voilà mon JSON: json1 enter image description here

et json2: enter image description here

+0

codé S'il vous plaît fournir votre 'array'. –

+0

attente .. je vais le poster ... – ivor

+0

@JaydeepMor isend une capture d'écran .. le fichier json est trop long ... – ivor

Répondre

0

je créer deux petites json pour rejoindre! Consultez ci-dessous,

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" 
      } 
     } 
    ] 
} 

Maintenant, je joindre qu'utiliser 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 de sortie

{ 
    "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

que diriez-vous uising foreach pour générer le nombre de nom de fichier json ... – ivor

+0

Pourquoi vous voulez 'foreach'. –

+0

l'URL est générée automatiquement ... elle augmente comme? Page = 2 à ainsi de suite ... – ivor

0

Si votre à la fois la structure du tableau même ici vous passez chats2 $ [$ key] sous forme de chaîne sur array_merge(); si erreur

$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

que diriez-vous de l'utiliser sur foreach? ... – ivor

+0

s'il vous plaît essayer ma mise à jour réponse et laissez-moi savoir si un problème –

0

Vous pouvez le faire:

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

Pour une même structure de tableau, vous pouvez utiliser array_merge($array1, $array2) méthode & puis utilisez json_encode().

Exemple:

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