- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
我需要向我的网络服务发送一个 json,json 是:
{
"Sala": {
"usuario": "%@",
"adversario": "%@",
"atualizacao": "%@",
"device": "%@",
"device_tipo": "ios"
}
}
。我正在尝试使用 Retrofit API 1.8 来做到这一点。当我尝试发送帖子时会引发异常。
异常(exception):
com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Use JsonReader.setLenient(true) to accept malformed JSON at line 1 column 7 path $
我正在尝试这个
public class ChatObject {
private String usuario;
private String adversario;
private String atualizacao;
private String email;
private String device;
private String device_tipo;
改造界面
@POST("/WsChat/interacao.json")
public void onReceiveMessage(@Body ChatObject obj,
Callback<JsonElement> response);
实现
public void receiveMessage(){
///{\"Sala\":{\"usuario\":\"%@\",\"adversario\":\"%@\",\"atualizacao\":\"%@\",\"device\":\"%@\",\"device_tipo\":\"ios\"}}
ChatObject chatObject = new ChatObject(BatalhaConfigs.USUARIO_EMAIL,
BatalhaConfigs.ADVERSARIO_EMAIL,
new Date().toString(),
BatalhaConfigs.USUARIO_EMAIL,
AndroidReturnId.getAndroidId(),
"android");
RestAdapter adapter = new RestAdapter.Builder()
.setLogLevel(RestAdapter.LogLevel.FULL)
.setRequestInterceptor(new CustomRequestInterceptor())
.setEndpoint(END_POINT)
.build();
ChatListener listener = adapter.create(ChatListener.class);
listener.onReceiveMessage(chatObject, new Callback<JsonElement>() {
@Override
public void success(JsonElement jsonElement, retrofit.client.Response response) {
Log.i("JSON ELEMENT->", jsonElement.toString());
}
@Override
public void failure(RetrofitError error) {
Log.i("FALHOU->", error.getLocalizedMessage());
}
});
}
最佳答案
com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Use JsonReader.setLenient(true)
通常在某些字符格式不正确时抛出 JSON .异常消息本身建议使反序列化更加宽容。
但我建议你修复你的 JSON 并删除不需要的字符。
您应该扩展 GsonConverter
并覆盖 fromBody()
以使 Gson
从容错的 JsonReader
中读取。然后只需将其设置为您的 RestAdapter
。如果没有抛出异常,这将尝试使用宽容的 JsonReader
反序列化然后关闭它。
public class LenientGsonConverter extends GsonConverter {
private Gson mGson;
public LenientGsonConverter(Gson gson) {
super(gson);
mGson = gson;
}
public LenientGsonConverter(Gson gson, String charset) {
super(gson, charset);
mGson = gson;
}
@Override
public Object fromBody(TypedInput body, Type type) throws ConversionException {
boolean willCloseStream = false; // try to close the stream, if there is no exception thrown using tolerant JsonReader
try {
JsonReader jsonReader = new JsonReader(new InputStreamReader(body.in()));
jsonReader.setLenient(true);
Object o = mGson.fromJson(jsonReader,type);
willCloseStream = true;
return o;
} catch (IOException e) {
e.printStackTrace();
}finally {
if(willCloseStream) {
closeStream(body);
}
}
return super.fromBody(body, type);
}
private void closeStream(TypedInput body){
try {
InputStream in = body.in();
in.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
关于android - 带有改造 API 的 MalformedJsonException?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27485346/
我正在尝试使用 Gson 反序列化一个类。 这是我试图反序列化的类: public class Product { public String id; public String na
我正在使用 gson 将 json 字符串转换为 Java 对象。result2 的值与 result1 的值完全相同。 (从调试器复制;添加反斜杠) 转换 result1 时抛出以下异常:com.g
就在今天,我正在使用 Android Studio 处理一个项目,这时我的计算机在上传过程中突然崩溃了。自从我重新启动它后,Gradle 控制台一直返回同样的错误: com.google.common
我正在使用 gson 将 json 字符串转换为 Java-Object。result2 的值与result1 的值完全相同。 (从调试器复制;添加了反斜杠) 转换result1时抛出以下异常:com
我在从 Json 文件创建对象时遇到问题。我有三个类,GsonReader 处理创建对象,一个是 POJO 类 Model 和一个 Main 方法类,我在其中调用 GsonReader 的方法,您能告
我正在尝试使用 Gson 解析这个序列化字符串。 { //other variables "MODIFIED_ON":"/Date(1490354840000)/", "MARKET_APP_URL"
我有一个 JSON 字符串,这只是其中的一部分: "geoLocation":{ "latitude": 46.05570, "longitude": 14.50705, }, 我还有
我尝试使用 Gson 将数据保存到 txt 文件中的 json 字符串,然后使用 Gson 恢复它。如果我在 eclipse 中做的话,一切都会顺利。但是打包成jar的时候,Gson会抛出异常。 这是
每当我尝试使用 Gradle 构建我的项目时,我都会收到此错误 :app:mergeDebugResources FAILED FAILURE: Build failed with an except
我需要向我的网络服务发送一个 json,json 是: { "Sala": { "usuario": "%@", "adversario": "%@",
我正在尝试将字符串转换为 Map使用代码: public static HashMap strMapToHashmap(String strMap) { Gson gson = new Gs
我使用 Gson 创建了一个 Json 字符串,这是有效的。我使用以下方式创建 Json 对象。 Map myMap=new HashMap(); myMap.put("dryRunTest",dry
在为 Google 应用引擎生成云端点客户端库时,我在 Eclipse 中遇到以下错误。我尝试重新启动 eclipse,清理我的项目。什么都不起作用。有什么建议如何解决吗? java.lang.ref
我正在尝试使用改造将图像上传到本地服务器。下面是我的 php 代码。 "Image uploaded successfully.")); } else { echo json_encod
我尝试使用 Node/HTTPS 发出 POST 请求,但不断收到此错误: BODY: {"message":"MalformedJsonException: com.google.gson.stre
我有一个可以打开 JSON 文件的测试套件。测试不会在模拟器 <= API 23 上通过,并且在较新的 API 级别上工作正常。 有两种不同的异常: com.google.gson.JsonSynta
我正在尝试从外部 URL 读取文件。该文件包含 JSON 格式的数据。我使用以下代码从文件中读取数据: URL url = new URL(url); URLConnection request =
我正在尝试使用以下代码创建 JsonElement: String updateUrl = myurl + "/new_url"; JsonParser parser = new JsonParser
我正在尝试进行改造调用,但遇到了 MalformedJsonException。 这是我的电话: String idFoto = "1ead0a1f-bbc4-46bd-901c-7988c0e6c6
我通过 Web 服务获取许多 JSON 对象,有时 json 对象格式错误。 我想在处理之前检查 json 是否有效。 所以我写了 JsonElement jsonData = parser.pars
我是一名优秀的程序员,十分优秀!