Я читаю строку JSON и сделать его в объект, используя код SCALA:Gson ошибка: JsonSyntaxException когда Json есть карта
val myInstance = (new Gson()).fromJson(t, classOf[myClass])
Все работает отлично, пока я не добавил хэш-карту в классе «MyClass». Тогда для следующего входа Json (друзья являются HashMap)
{"pId":"P:12345","name":"Dan Brown","friends":{"{\"firstname\":\"John\",\"lastname\":\"Smith\"}":1.0}}
Тогда я получил следующее сообщение об ошибке в «FirstName» атрибут, как показано ниже. Кто-нибудь есть идеи? Большое спасибо!
15/07/29 08:43:05 ERROR Executor: Exception in task 0.0 in stage 0.0 (TID 0)
com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING at line 1 column 51
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:176)
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:145)
и вот MyCLASS класс:
public final class myClass extends implements Serializable {
private static final long serialVersionUID = 11271827L;
private String pId;
private String name;
private List<MyPet> pets = new ArrayList<MyPet>();
private Map<MyName, Double> friends = new HashMap<MyName, Double>();
:
//some getter/setter here
}
и вот Myname класс:
public class MyName {
private String firstname;
private String lastname;
/**
*
* @return the Json string
*/
public final String toJsonString() {
return (new Gson()).toJson(this);
}
@Override
public final String toString() {
return toJsonString();
}
}
Это '' {\ "firstname \": \ "John \", \ "lastname \": \ "Smith \"} "' является строкой JSON. Что вы пытаетесь десериализовать? Покажите нам, что такое 'myClass'. –
Обратите внимание на разницу между полем 'name' и поле' firstname'. См. Обратную косую черту перед цитатами вокруг 'firstname'? Это строка в json-входе. Я предполагаю, что вы не указываете тип карты, т. Е. 'HashMap'. –
Я добавил определение myClass выше. Благодаря! – Edamame