2

JSON で解析されたマップを、次のシグネチャを持つメソッドに渡す必要があります。

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

残念ながら、私は上記の方法を制御することはできません.Jacksonは解析されたJSONをMap<String, Object>.

私はMap<String, String>場所が必要です

  1. Integer、Long、Boolean の代わりにプリミティブ JSON 型の場合は、その toString() 変換された値が必要です。
  2. List/Map などの複雑な JSON 型の場合、結果をネイティブ JSON 形式で String に格納します。

たとえば、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 の初心者であり、Jackson についての予備知識はありません (このソリューションには Jackson を使用する必要があります)。

ありがとうございました。

4

3 に答える 3

1

はい、FULL 型情報を確実に渡す限り、暗黙的な変換は機能するはずです。次のようなものです:

Map<String,String> map = mapper.readValue(jsonSource, new TypeReference<Map<String,String>>() { });
于 2012-09-10T17:29:24.173 に答える
0

を探していると思いますkeyAs。詳細については、ジャクソンのドキュメントをご覧ください。

于 2012-09-09T08:36:00.373 に答える
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);
}
于 2012-09-09T08:02:54.520 に答える