我有此链接:https://git.io/fjaqJ
这是一些奇怪的说明:请注意,每个json响应都以'/'字符开头。您需要相应地对其进行解析。
那是什么意思? 实际上,使用此json,我必须在堆栈卡视图中显示数据。
我尝试过这个(我应该直接将下面的这个类粘贴到我的Android Studio模态类中吗?为什么会有hashmap?):
package com.example;
import java.util.HashMap;
import java.util.Map;
import com.fasterxml.jackson.annotation.JsonAnyGetter;
import com.fasterxml.jackson.annotation.JsonAnySetter;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonPropertyOrder;
@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonPropertyOrder({
"id",
"text"
})
public class Datum {
@JsonProperty("id")
private String id;
@JsonProperty("text")
private String text;
@JsonIgnore
private Map<String, Object> additionalProperties = new HashMap<String, Object>();
@JsonProperty("id")
public String getId() {
return id;
}
@JsonProperty("id")
public void setId(String id) {
this.id = id;
}
@JsonProperty("text")
public String getText() {
return text;
}
@JsonProperty("text")
public void setText(String text) {
this.text = text;
}
@JsonAnyGetter
public Map<String, Object> getAdditionalProperties() {
return this.additionalProperties;
}
@JsonAnySetter
public void setAdditionalProperty(String name, Object value) {
this.additionalProperties.put(name, value);
}
}
-----------------------------------com.example.Example.java-----------------------------------
package com.example;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.fasterxml.jackson.annotation.JsonAnyGetter;
import com.fasterxml.jackson.annotation.JsonAnySetter;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonPropertyOrder;
@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonPropertyOrder({
"data"
})
public class Example {
@JsonProperty("data")
private List<Datum> data = null;
@JsonIgnore
private Map<String, Object> additionalProperties = new HashMap<String, Object>();
@JsonProperty("data")
public List<Datum> getData() {
return data;
}
@JsonProperty("data")
public void setData(List<Datum> data) {
this.data = data;
}
@JsonAnyGetter
public Map<String, Object> getAdditionalProperties() {
return this.additionalProperties;
}
@JsonAnySetter
public void setAdditionalProperty(String name, Object value) {
this.additionalProperties.put(name, value);
}
}
答案 0 :(得分:0)
"/"
在Python中转换为String
格式时可能会出现字符。因此他们可能使用Flask
发送此Json
。但是,这不是问题。只需在解析之前删除第一个元素即可。
if (text != null && text.charAt(0).toString().equals("/")) {
text = text.subString(1, text.length())
}
答案 1 :(得分:0)
最初回答here
要解析无效的JSON或String或JSONP响应,请使用ScalarConverterFactory。
要解析JSON响应,请使用 GsonConverterFactory 。
确保gradle中具有以下依赖项:
implementation 'com.squareup.retrofit2:converter-gson:2.5.0'
//For serialising JSONP add converter-scalars
implementation 'com.squareup.retrofit2:converter-scalars:2.1.0'
//An Adapter for adapting RxJava 2.x types.
implementation 'com.squareup.retrofit2:adapter-rxjava2:2.2.0'
添加converterFactories进行改造,并在构建Gson时使用setLenient()摆脱错误JSON document was not fully consumed.
val gson = GsonBuilder()
.setLenient()
.create()
val retrofit = Retrofit.Builder()
.baseUrl("http://api.flickr.com/")
.client(builder.build())
.addConverterFactory(ScalarsConverterFactory.create()) //important
.addConverterFactory(GsonConverterFactory.create(gson))
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.build()
@GET("end-point/to/some/jsonp/url")
fun getJsonpData() : Observable<String>
使用converters or mappers
通过删除存在的前缀和后缀将无效的JSON转换为JSON。
然后通过
SomeDataModel model = Gson().fromJson<SomeDataModel>(jsonResponse,
SomeDataModel::class.java)