在调试一段将string反序列化为Object的代码时,我意识到JSON解析使用的是toString表示,而不是对象的JSON表示。
POJO:
import lombok.Builder;
import lombok.Data;
@Data
@Builder
public class Pojo {
int a;
String b;
}
分析逻辑:
Gson gsonInstance =
new GsonBuilder()
.setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES)
.setDateFormat("yyyy-MM-dd")
.create();
String json2 = "{a=5, b=field}";
Pojo obj = gsonInstance.fromJson(json2, Pojo.class);
System.out.println(obj);
当我将包含“:”的字段添加到POJO时,这就开始中断。比如约会。
关于这个问题的两个问题:1)Gson是怎么支持这个的?我找不到任何相同的文档。2)我如何处理我前面提到的与日期相关的问题,使用这种toString类型的实现?我尝试为Java转义字符串,但没有帮助。
这是Gson的一个特性,它实际上是文档化的,但是文档化的有点隐蔽。请参阅:gson.java。JSON反序列化最后调用是
public
在守则正文中,请参阅:
reader.setLenient(true);
public final void setLenient(boolean lenient)
该方法上的javadoc声明如下:
/***配置此解析器,使其接受的内容自由。默认情况下,*这个解析器是严格的,只接受RFC4627指定的JSON。将*解析器设置为lenient会导致它忽略以下语法错误:**
“)]}'\n”
。*以上就是Gson解析您的字符串并反序列化相同的原因。
如果您的名称/值(未加引号)有任何“:”,上述操作将不起作用,原因是Gson将(在您的情况下)解释为name=[value或Another Name???]:value(Gson没有那么宽松)。
使用正确有效的JSON并反序列化。
如何使用GSON解析这个json? 我的代码: 我的stacktrace com.google.gson.JsonSyn出租车异常:java.lang.IllegalStateExctive:预期BEGIN_OBJECT但BEGIN_ARRAY在第1行第2列路径$com.google.gson.internal.bind.ReflecteTypeAdapterFactory$Adapter.rea
问题内容: 我正在尝试使用Spring 3.0.6返回JSON响应,但是得到了406响应“ Not Acceptable”,其描述为:“此请求所标识的资源仅能够生成具有以下特征的响应:请求“接受”标头()。” 我知道之前曾问过一个非常类似的问题,但尽管进行了许多测试,但我无法使它适用于我的项目,而且我不知道自己在做什么错。 在我的Maven pom.xml中,执行以下操作: 在web.xml中,我
和 是我用来获取JSON并对其进行解析的类。但是当我运行第一个时,它会报告以下堆栈跟踪: 它告诉我添加JsonReader。将lenient(true)设置为我的代码,但我的代码不使用JsonReader。那么如何将setLenient(true)添加到代码中? 编辑:添加API响应(格式化):
本文向大家介绍Android中gson、jsonobject解析JSON的方法详解,包括了Android中gson、jsonobject解析JSON的方法详解的使用技巧和注意事项,需要的朋友参考一下 JSON的定义: 一种轻量级的数据交换格式,具有良好的可读和便于快速编写的特性。业内主流技术为其提供了完整的解决方案(有点类似于正则表达式 ,获得了当今大部分语言的支持),从而可以在不同平台间进行数据
问题内容: 我有一个像这样的JSON对象: 并尝试与Gson解析: 但是“ responceBean”始终为“ null” 这是所有其他类: 这是我的最新尝试。我不知何故找不到正确的方法。任何帮助将不胜感激。 问题答案: 您的 JSON模型与您的对象模型不匹配 。 您需要一个中间层来填补空白: TypeAdapter 。 而且,没有用户的命名信息。 最后是名称不匹配:JSON中的“ worklog