ジャクソン:フィールド名を二重引用符で囲むことを期待していた
Jacksonを使用してJSON文字列をマップに変換する簡単な例です。
String json = "{name:\"mkyong\"}"; Map<String,String> map = new HashMap<String,String>(); ObjectMapper mapper = new ObjectMapper(); map = mapper.readValue(json, new TypeReference<HashMap<String,String>>(){});
問題
プログラムが実行されると、次のエラーメッセージが表示されます
org.codehaus.jackson.JsonParseException: Unexpected character ('n' (code 110)): was expecting double-quote to start field name at[Source: java.io.StringReader@7c87c24a; line: 1, column: 3]
解決策
JSON仕様では、フィールド名に二重引用符を使用する必要があります。 Jacksonが引用符で囲まれていないフィールド名を処理できるようにするには、
ObjectMapper`設定に
JsonParser.Feature.ALLOW
UNQUOTED
FIELD__NAMES`を追加します。
package com.mkyong.jsonexample; import java.io.IOException; import java.util.HashMap; import java.util.Map; import org.codehaus.jackson.JsonParseException; import org.codehaus.jackson.JsonParser; import org.codehaus.jackson.map.JsonMappingException; import org.codehaus.jackson.map.ObjectMapper; import org.codehaus.jackson.type.TypeReference; public class JsonMapExample { public static void main(String[]args) { String json = "{name:\"mkyong\"}"; Map<String,String> map = new HashMap<String,String>(); ObjectMapper mapper = new ObjectMapper(); mapper.configure(JsonParser.Feature.ALLOW__UNQUOTED__FIELD__NAMES, true); try { map = mapper.readValue(json, new TypeReference<HashMap<String,String>>(){}); System.out.println(map); } catch (JsonParseException e) { e.printStackTrace(); } catch (JsonMappingException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }
出力
{name=mkyong}
参考文献
JavaDoc]