Рубрики
Без рубрики

Джексон: ожидал, что имя поля будет начинаться с двойной кавычки

– Джексон: ожидал, что имя поля будет начинаться с двойной кавычки

Простой пример использования Джексона для преобразования строки JSON в карту.

  String json = "{name:\"mkyong\"}";
		
  Map map = new HashMap();
  ObjectMapper mapper = new ObjectMapper();
		
  map = mapper.readValue(json, new TypeReference>(){});

Проблема

Когда программа выполняется, она выдает следующее сообщение об ошибке

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 требуется использовать двойные кавычки для имен полей. Чтобы Джексон мог обрабатывать имя поля без кавычек, добавьте JsonParser. Особенность. ALLOW_UNQUOTED_FIELD_NAMES РАЗРЕШЕННЫЕ_ИМЕНЫ_ ПОЛЕЙ в конфигурации ObjectMapper .

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 map = new HashMap();
	ObjectMapper mapper = new ObjectMapper();
		
	mapper.configure(JsonParser.Feature.ALLOW_UNQUOTED_FIELD_NAMES, true);
		
	try {

		map = mapper.readValue(json, 
                         new TypeReference>(){});	
		System.out.println(map);
			
	} catch (JsonParseException e) {
		e.printStackTrace();
	} catch (JsonMappingException e) {
		e.printStackTrace();
	} catch (IOException e) {
		e.printStackTrace();
	}	
		
  }
}

Выход

{name=mkyong}

Рекомендации

  1. Википедия: JSON
  2. Анализатор JSON. Функция JavaDoc

Оригинал: “https://mkyong.com/java/jackson-was-expecting-double-quote-to-start-field-name/”