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: [email protected]; 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}