gson.JsonSyntaxException: java.lang.IllegalStateException: Expected a string but was BEGIN_ARRAY at line 1

w‮uttual.ww‬ri.com
gson.JsonSyntaxException: java.lang.IllegalStateException: Expected a string but was BEGIN_ARRAY at line 1

Error Message

Exception in thread "main" com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected a string but was BEGIN_ARRAY at line 1 column 15 path $.
	at com.google.gson.Gson.fromJson(Gson.java:1226)
	at com.google.gson.Gson.fromJson(Gson.java:1124)
	at com.google.gson.Gson.fromJson(Gson.java:1034)
	at com.google.gson.Gson.fromJson(Gson.java:1001)
	at hello.Lautturi.main(Lautturi.java:85)
Caused by: java.lang.IllegalStateException: Expected a string but was BEGIN_ARRAY at line 1 column 15 path $.
	at com.google.gson.stream.JsonReader.nextString(JsonReader.java:834)
	at com.google.gson.internal.bind.TypeAdapters$15.read(TypeAdapters.java:421)
	at com.google.gson.internal.bind.TypeAdapters$15.read(TypeAdapters.java:409)
	at com.google.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.read(TypeAdapterRuntimeTypeWrapper.java:40)
	at com.google.gson.internal.bind.MapTypeAdapterFactory$Adapter.read(MapTypeAdapterFactory.java:186)
	at com.google.gson.internal.bind.MapTypeAdapterFactory$Adapter.read(MapTypeAdapterFactory.java:144)
	at com.google.gson.Gson.fromJson(Gson.java:1214)

Error Code

/**
 * @author lautturi.com 
 * Java example: parsing json string to hashmap in java
 */
public class Lautturi {
	public static void main(String[] args) {
		String jsonString = "{\"employees\":[{\"id\":111,\"name\":\"Lautturi\"}, {\"id\":112,\"name\":\"James\"}]}";		
		Map<String, String> retMap = new Gson().fromJson(
			    jsonString, new TypeToken<HashMap<String, String>>() {}.getType()
			);
		System.out.println(retMap);
	}
}

Cause

JsonSyntaxException
Caused by: java.lang.IllegalStateException: Expected a string but was BEGIN_ARRAY

check the json string.

Solution

change

Map<String, String> retMap = new Gson().fromJson(
			    jsonString, new TypeToken<HashMap<String, String>>() {}.getType()
	);

to

Map<String, Object> retMap = new Gson().fromJson(
			    jsonString, new TypeToken<HashMap<String, Object>>() {}.getType()
			);

the employees value is an object but not string.

Fixed code

/**
 * @author lautturi.com 
 * Java example: convert json string to hashmap in java
 */

import java.util.*;

import org.json.JSONObject;

import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;

public class Lautturi {
	public static void main(String[] args) {
		String jsonString = "{\"employees\":[{\"id\":111,\"name\":\"Lautturi\"}, {\"id\":112,\"name\":\"James\"}]}";		
		Map<String, Object> retMap = new Gson().fromJson(
			    jsonString, new TypeToken<HashMap<String, Object>>() {}.getType()
			);
		System.out.println(retMap);
	}
}
Created Time:2017-10-03 12:12:48  Author:lautturi