J'ai deux fichiers JSON et j'aimerais avoir un JSON contenant les différences. il est important fort> que seul strong> Les différences réelles de fort> contenu strong> doivent être affichées, peu importe la modification de l'ordre de certains éléments. p>
Quelle serait la meilleure façon de faire ça? Je cherche une solution aussi efficace que possible, car Remarque: le JSON code> S peut contenir de nombreux données et les utilisateurs doivent être effectués aussi rapidement que possible. P>
JSON code> S peut contenir des données codées à différentes profondeurs. Tout langage de programmation est correct, mais je préférerais une réponse qui pourrait facilement être mise en œuvre dans PHP. P>
3 Réponses :
Essayez d'utiliser Array_Diff fonction
array_diff(json_decode($jsonData1), json_decode($jsonData2));
Fondamentalement, ce que vous voulez, c'est quelque chose de similaire à Le Supposons que vous souhaitiez calculer la différence entre l'objet A et B et avoir le résultat dans l'objet C.
Le principe est de boucler sur chaque champ d'un (un La commande d'un doit être respectée. p> array_diff_assoc code>, mais appliqué aux objets JSON et récursif. P>
array_diff Code> Les fonctions ne sont pas récursives en raison de problèmes de référence: il est possible d'attribuer une référence d'un tableau à une entrée de ce tableau, ce qui rend le réseau infiniment récursif. Je ne pense pas qu'il soit possible d'obtenir la même situation avec un objet JSON, faisant ainsi une fonction récursive sûre. P>
foreach code> devrait faire) et quand: p>
Devrais-je plutôt régler le JSON code> s?
@Bujancamihai, remarquez cet algorithme ne considérera pas les clés qui n'apparaissent que dans b
@Alexander C'est le principe de la différence de réglage: A - B signifie que vous souhaitez que les éléments d'un pas dans B. ceux qui apparaissent dans B et non dans A ne sont pas pertinents.
@Didierc, une édition du titre de la question serait appropriée alors
Peu importe la façon dont vous le regardez, je pense que vous avez juste besoin de passer par toutes les touches. À moins que vous ne puissiez compter sur une sorte d'identifiant, mais pour une telle chose dont vous aurez besoin d'élaborer plus
J'ai répondu à une question similaire ici: "[Bandes multidimensionnelles, différence de contrôle] [1]". La réponse pourrait être modifiée pour descendre dans les branches, si nécessaire, en appelant récursivement les méthodes "get_keys" et "compare_records". [1]: Stackoverflow.com/questions/15504734/ ...
@ J.d.pace Désolé, je ne l'ai pas vu
"Quel que soit le changement de l'ordre de certains éléments" - je suppose que vous parlez d'objets. Dans les listes, commander est i> important.
@Karolyhorvath Ils sont des objets rassemblés de Facebook avec API graphique. Je pourrais facilement les trier et ce ne serait plus un problème, mais le tri pourrait coûter beaucoup de temps si de nombreuses données sont de grandes quantités de données.
@Bujancamihai Bonjour, as-tu réussi à faire ça? Je suis dans la même situation. Tous les pointeurs pouvaient grandement être utiles.