【问题标题】:What does ' json response starts with a '/' character' means?'json 响应以'/' 字符开头是什么意思?
【发布时间】:2020-03-09 15:27:15
【问题描述】:

我有这个链接:https://git.io/fjaqJ

这是一些奇怪的说明:请注意,每个 json 响应都以“/”字符开头。你需要相应地解析它。

这是什么意思? 实际上,使用这个 json,我必须在 stack cardview 中显示数据。

我试过这个(我应该直接将这个下面的类粘贴到我的Android studio modal类中吗?为什么会有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);
}

}

【问题讨论】:

    标签: android json


    【解决方案1】:

    "/" 在 Python 中转换为String 格式时可能会出现字符。所以他们可能会使用Flask 发送这个Json。但是,这不是问题。只需在解析之前删除第一个元素。

    if (text != null && text.charAt(0).toString().equals("/")) {
        text = text.subString(1, text.length())
    }
    

    【讨论】:

    • 这是关于 java 和 android 的。没有 Python。我还必须将这些数据用于 Android。我怎样才能做到这一点?我试过用这个:jsonschema2pojo.org
    • @PoojaSingh 您的 SERVER 正在使用 Python 返回此 Json 字符串。
    【解决方案2】:

    原回复here

    要解析无效的 JSON 或字符串或 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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-12-02
      • 1970-01-01
      • 1970-01-01
      • 2022-12-11
      • 2010-10-07
      • 2017-01-28
      • 2014-08-30
      • 1970-01-01
      相关资源
      最近更新 更多