gpt4 book ai didi

java - Gson错误: JsonSyntaxException when Json has a map

转载 作者:太空宇宙 更新时间:2023-11-04 13:35:52 25 4
gpt4 key购买 nike

我正在读取一个 Json 字符串并使用 scala 代码将其转换为一个对象:

val myInstance = (new Gson()).fromJson(t, classOf[myClass])

一切正常,直到我在“myClass”类中添加了 HashMap 。然后对于下面的Json输入(friends是一个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();
}
}

最佳答案

在json中,map的key应该是字符串。在您的情况下,您使用 MyName 作为 key 。所以 json 解析器使用 MyName#toString() 转换为字符串。

我的建议是正确的 MyName#toString() 实现,并在 MyName 类中提供静态方法 MyName valueOf(String)

例如:

class MyName{
private String firstName;
private String lastName;

// getters and setters

@Override
public String toString(){
return firstName+" "+lastName;
}

public static MyName valueOf(String str){
int space = str.lastIndexOf(' ');
if(space==-1)
throw new IllegalArgumentException();
MyName myName = new MyName();
myName.setFirstName(str.subString(0, space));
myName.setLastName(str.subString(space+1));
return myName;
}
}

此处 valueOftoString 实现应该兼容。

上面的代码假设lastName中没有空格

关于java - Gson错误: JsonSyntaxException when Json has a map,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31705526/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com