2017-07-26 4 views
2

Est-il possible de copier uniquement la valeur des propriétés égales d'un JSON à un autre?
Par exemple:Copier uniquement la valeur des propriétés égales d'un JSON à un autre

json1-

{ 
    "isMultiRow": true, 
    "name": "Donny", 
    "description": "Donnyboy" 
} 

json2-

{ 
    "isMultiRow": false, 
    "name": "Jonny", 
    "description": "Jonny boy" 
    "age": "old" 
    "radius":"big" 
} 

si je fais quelque chose comme json1.copy(json2) je vais à json1 -

{ 
    "isMultiRow": false, 
    "name": "Jonny", 
    "description": "Jonny boy" 
} 

age et radius ne sera pas app oreille parce qu'ils n'existent pas dans json1.

+0

donc ce sont des chaînes ou tout type d'objet de représentation json? –

+0

parcourir les propriétés de json1, les rechercher dans json2 et copier la valeur si trouvée. – Henry

+0

Quelle bibliothèque JSON utilisez-vous? – shmosel

Répondre

1

Vous pouvez écrire une méthode personnalisée qui accepte 2 JSONObject et une liste de champs qui doivent être copiés d'un JSONObject src vers JSONObject.

private static void copy(JSONObject dest, JSONObject src, List<String> fields) { 
    for (String key : fields) { 
     dest.put(key, src.get(key)); 
    } 
} 

Ou vous pouvez avoir votre propre classe personnalisée qui étend JSONObject et une nouvelle copie de la méthode qui accepte un autre champ de JSON et des copies par le champ.

public class JSON extends JSONObject { 

    private static final long serialVersionUID = 1L; 

    public void copy(JSON other) { 
     // implement copy logic by iterating over keySet etc 
    } 
} 

NOTE: Si votre JSON a de simples valeurs clés alors ci-dessus sera très simple mise en œuvre, si votre chaîne JSON a des objets complexes, des tableaux, etc., vous auriez ajouter la manipulation pour chacun de ces types et faire une copie en profondeur/override de src à dest.

0

En supposant que le type de votre objet JSON implémente Map, vous pouvez le faire:

json1.replaceAll(json2::getOrDefault); 

Cela remplacera les champs en json1 avec leurs valeurs correspondantes de json2. Si json2 n'a pas de champ, il sera laissé tel quel.