2011-08-24 6 views
0

J'ai converti un objet Java qui avait une chaîne et un hashmap lié en JSON à l'aide de GSON.toJson. Le résultat de ce processus est une combinaison de la clé: des paires de valeurs et un tableau comme ci-dessous:Deserialize JSON

{"a":"b", "c":"d", "featuremap":{"e":"f", "g":"h"}} 

Pourriez-vous s'il vous plaît donner des conseils sur la façon dont je peux désérialiser cela en une chaîne qui contient la clé: des paires de valeur que par exemple le tableau featuremap est résolu pour que la sortie soit:

{"a":"b", "c":"d", "e":"f", "g":"h"} 
+1

Il ne s'agit pas de savoir comment * désérialiser * quelque chose, mais plutôt comment * aplatir * un objet JS. Juste FYI. Je vais essayer de répondre ci-dessous. – BishopRook

Répondre

1

Cela dépend: ça va toujours être un objet comme

var objToFlatten = { 
    "a": "b", 
    "c": "d", 
    "featuremap": { 
     "e": "f", 
     "g": "h" 
    } 
} 

Ou pourrait potentiellement être multi-imbriqué, avec plusieurs objets à aplatir? Par exemple:

var objToFlatten = { 
    "a": "b", 
    "c": "d", 
    "featuremap": { 
     "e": "f", 
     "g": "h" 
    }, 
    "someothermap": { 
     "e": "f", 
     "g": "h", 
     "nestedmap": { 
      "i": "j" 
     } 
    } 
} 

Le premier est facile à faire, mais hacky.

function copyFromObject(other) { 
    for (var propertyName in other) { 
     if (propertyName == 'featureMap') continue; 
     if (other.hasOwnProperty(propertyName)) { 
      this[propertyName] = other[propertyName]; 
     } 
    } 
    return this; 
} 
var flattened = copyFromObject.call({}, objToFlatten); 

Ce dernier serait plus propre et nécessiterait une solution récursive. En outre, vous devez déterminer ce que vous voulez faire à propos des choses comme les entrées dupliquées. Que faire si vous avez deux propriétés dans deux objets imbriqués avec le même nom?

+0

L'OP a demandé comment faire cela en Java et non en JavaScript. – CodeMonkeyKing