2012-09-09 62 views
2

我需要通過JSON解析地圖分成一些方法,該方法具有以下特徵:爪哇傑克遜JSON解析成地圖<字符串,字符串>

QUEUE.sendMsg(Map<String, String> data); 

不幸的是,我對上述方法無控制,和Jackson給出我在Map<String, Object>中解析了JSON。

我需要一個Map<String, String>其中

  1. 的原始JSON類型,而不是爲Integer,Long,布爾的,我想它的toString()轉換值。
  2. 爲複雜的JSON類型,如列表/地圖,將結果保存在本地的字符串JSON格式。

例如,如果JSON輸入

{ 
    "name" = "John", 
    "marked" = false, 
    "age" = 30, 
    "tags" = [ "work", "personal" ], 
    "meta" = { "k1" : "v1", "k2" : "v2" }, 
} 

我想要一個Map<String, String>具有

map.get("name") returns "John", 
map.get("marked") returns "false", 
map.get("age") returns "30", 
map.get("tags") returns "[ \"work\", \"personal\" ]", 
map.get("meta") returns "{ \"k1\" : \"v1\", \"k2\" : \"v2\" }" 

有什麼辦法來實現這一目標?

不幸的是,我幾乎對Java,並具有傑克遜(我不得不使用傑克遜這個解決方案)的先驗知識。

謝謝。

+2

爲什麼你想返回整個JSON對象作爲字符串(鍵標籤,元)? –

回答

0

像這樣的東西應該工作...

final Map<String, Object> input = ...; 
final Map<String, String> output = new Map<>(input.size()); 
final StringWriter writer = new StringWriter(); 
final StringBuffer buf = writer.getBuffer(); 
for (final Map.Entry<String, Object> entry : input.entrySet()) { 
    try (final JsonGenerator gen = JsonFactory.createJsonGenerator(writer)) { 
    gen.writeObject(entry.getValue()); 
    } 
    output.put(entry.getKey(), buf.toString()); 
    buf.setLength(0); 
} 
1

是,隱式轉換應該只要你確保你通過完整的類型信息的工作。所以像這樣:

Map<String,String> map = mapper.readValue(jsonSource, new TypeReference<Map<String,String>>() { }); 
相關問題