De fusion (Concat) Plusieurs JSONObjects en Java
Je suis en consommer JSON à partir de deux sources différentes, je me retrouve avec deux JSONObject
s et je tiens à les combiner en un seul.
De données:
"Object1": {
"Stringkey":"StringVal",
"ArrayKey": [Data0, Data1]
}
"Object2": {
"Stringkey":"StringVal",
"Stringkey":"StringVal",
"Stringkey":"StringVal",
}
Code, à l'aide de http://json.org/java/ bibliothèque:
//jso1 and jso2 are some JSONObjects already instantiated
JSONObject Obj1 = (JSONObject) jso.get("Object1");
JSONObject Obj2 = (JSONObject) jso.get("Object2");
Donc, dans cette situation, je tiens à combiner Obj1
et Obj2
, soit de faire un tout nouveau JSONObject
ou concat l'un à l'autre. Toutes les idées d'ailleurs les tirant de toutes part et individuellement ajoutant par put
s?
- Connexes: Fusion des YAML
Vous devez vous connecter pour publier un commentaire.
Si vous voulez un nouvel objet avec les deux clés, l'Objet1 et Objet2, vous pouvez le faire:
Si vous souhaitez les fusionner, si par exemple un haut niveau d'objet dispose de 5 touches (Stringkey1, ArrayKey, StringKey2, StringKey3, StringKey4), je pense que vous devez le faire manuellement:
Ce serait beaucoup plus facile si JSONObject mis en œuvre Carte, et pris en charge putAll.
JSONObject.names
.Vous pouvez créer un nouveau JSONObject comme ceci:
Avec ce code, si vous en avez répété clés entre
Obj1
etObj2
la valeur dansObj2
restera. Si vous souhaitez que les valeurs dansObj1
être conservés à inverser l'ordre de la matrice de la ligne 2.new
avantJSONObject()
, éditer n'est pas autorisé pour les moins de 6 caractères.Dans certains cas, vous avez besoin d'une profondeur de fusion, c'est à dire, de fusionner le contenu des champs avec des noms identiques (comme lors de la copie des dossiers dans Windows). Cette fonction peut être utile:
Cette méthode wrapper pour vous aider :
Un prêt de la méthode pour fusionner n'importe quel nombre de JSONObjects:
Grâce à Erel. Voici une Gson version.
En plus de @erel réponse, j'ai eu à faire ce montage (je suis en utilisant
org.json.simple
) à l'extérieurelse
pour traiterJSONArray
's:J'ai utilisé de la chaîne pour concaténer nouvel objet à un objet existant.
Pour moi que la fonction de travail:
(avis) - cette mise en œuvre de concataion de json est pour l'importation
org.json.simple.JSONObject;
Fusion de type de données de la structure des arbres n'est pas anodin, vous devez définir la priorité, de la poignée de types incompatibles, de définir comment ils vont être castée et fusionné...
Donc, à mon avis, vous ne pourrez pas éviter
Si votre question est: A quelqu'un de le faire pour moi encore?
Alors je pense que vous pouvez jeter un oeil à ce YAML la fusion de la bibliothèque ou de l'outil je l'ai relancé. (YAML est un sur-ensemble de JSON), et les principes sont applicables à la fois.
(Toutefois, ce code renvoie YAML des objets, pas de JSON. Hésitez pas à prolonger le projet et l'envoyer à un PR.)
Aujourd'hui, j'ai également du mal à fusionner des objets JSON et est venu avec la solution suivante (utilise Gson de la bibliothèque).