- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在读取一个 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;
}
}
此处 valueOf
和 toString
实现应该兼容。
上面的代码假设lastName
中没有空格
关于java - Gson错误: JsonSyntaxException when Json has a map,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31705526/
我正在开发一个通过 HTTPS POST 请求将数据导入 Web 服务的项目。为了创建 HTTPS 请求,我使用了 Retrofit2。这是我关于如何创建请求和评估响应的方法: 我正在创建一个对象来存
我遇到了 JSON 解析错误。我的代码如下: try { //Read the server response and attempt to parse it as JSON
我正在使用托管在 SmarterAsp.net 上的 ASP Web API 网络服务以 Json 格式获取数据以在我的 android 应用程序中使用它们,当我使用 Wifi 时一切正常并且 Jso
大家好,我正在制作一个 Android 应用程序,其中我收到 4 条错误消息: GSON 无法解析为类型 JsonSyntaxException 无法解析为类型 和另外2个 刚刚添加了gson-2.2
我最近决定使用 Android 的 Retrofit Library 来进行网络调用,并使用 GSON 来处理 JSON。但我不断收到以下异常,并且我的应用程序崩溃了。 Caused by: retr
我是retrofit的新手(我之前使用volley),在此之前我在retrofit方面做得很好,直到出现此错误:- com.google.gson.JsonSyntaxException: java.
我正在运行一些 Java 分析工具来进行 WES 分析。所以,我可以被认为是 Java 的新手 :( 顺便说一句,我使用 PharmCAT 来分析我的 VCF 文件。但我得到了这个错误: com.go
我有一个名为 DateTime 的自定义对象。我使用方法 registerTypeAdapter 注册 TypeAdapter 。我认为 GSON 忽略了这个适配器。 GSON如何检测json对象中的
我正在尝试使用 Gson 反序列化一个 json 数组,但目前我收到了一个 JsonSyntaxException。 json 字符串是由 .NET MVC3 Web 服务使用 JsonResult
正在测试一个抛出 JsonSyntaxException 的类,即使我期望抛出预期的错误,测试仍然失败。我的测试: @规则 公共(public) ExpectedException 异常 = Expe
我正在读取一个 Json 字符串并使用 scala 代码将其转换为一个对象: val myInstance = (new Gson()).fromJson(t, classOf[myClass]) 一
相关Question Json的响应是换行符Json: {"type":"data","id":"xyz"} {"type":"value","id":"xcf"} .... .... 我正在使用Re
我正在尝试复制 Google App Engine Servlet 模块 here使用 Retrofit 而不是 AsyncTask。 我觉得很奇怪,但显然 Retrofit 2.0 不支持连接到 G
我遇到了这个问题,我不想解决那个问题,但想办法告诉 GSON“跳过错误并继续”解析: Can't parses json : java.lang.IllegalStateException:
首先,我知道其他一些用户之前已经问过类似的问题,所以您可能认为这是一个重复的问题,但事实并非如此。 我想创建一个模型类来解析 GoogleMaps-Direction API 响应从 JSON 格式到
我是 gson 新手并收到此错误。 com.google.gson.JsonSyntaxException:java.lang.IllegalStateException:预期为 BEGIN_OBJE
我正在获取一个 JSON 字符串,并希望将其转换为类型化对象。 但是我收到以下反序列化错误: 04-02 16:20:45.632: E/AndroidRuntime(30912): com.goog
我有一个 JSON 文件: { "settings": { "header": { "id": "240A64CDC43F", "filename": "net
我正在尝试使用其 Java 驱动程序测试 ArangoDB。我正在 CentOS 6.6 上测试它。我收到以下错误: 15:48:01.151 [main] DEBUG com.arangodb.ht
这个问题已经有答案了: Gson to json conversion with two DateFormat (3 个回答) 已关闭 6 年前。 我遇到以下异常 - com.google.gson.
我是一名优秀的程序员,十分优秀!