2011-08-24 153 views
0

我使用GSON.toJson将具有字符串和链接的hashmap的Java对象转换为JSON。从这个过程的输出是关键的组合:值对,并为下面的数组:反序列化JSON

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

能否请您指教我如何能反序列化到这个包含密钥字符串:值对ONLY即featuremap阵列已解决,以便输出为:

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

这不是一个关于如何*反序列化*的问题,它是关于如何*平坦* JS对象。只是FYI。我会尽量回答下面。 – BishopRook

回答

1

这取决于:是它总是会像

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

的对象,也可能潜在地是多嵌套的,多个物体变平?例如:

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

第一个是易碎,但哈克。

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

后者会更干净,需要递归解决方案。你也需要弄清楚你想要做些什么像重复的条目。如果在两个名称相同的嵌套对象中有两个属性会怎么样?

+0

OP问及如何在Java而不是JavaScript中做到这一点。 – CodeMonkeyKing