JSON 未从 API 调用进行解析



在这里看了很多之后,我没有发现与这个问题类似的东西。

我从我的 API 调用中获取 JSON,但它没有解析我完成了我正在使用的步骤并得到一个解析错误,SyntaxError: Unexpected token s in JSON at position 1我将在下面发布所有内容的示例,希望有人可以告诉我我做错了什么(我一直在使用相同的东西来解析其他对象,他们不确定为什么没有)

预期的 JSON

{
"user":{
"id":1054776,
"email":"fghrklhjkltghskj@gmail.com",
"username":"user1496654688",
"first_name":null,
"last_name":null,
"last_login":null,
"email_confirmed":false
}
}

注册请求.java

public class RegisterRequest {
private Context mContext;
private Map<String, String> mCredentials;
public interface RegisterFeedback{
void onRegisterSuccess(RegisterResponse response);
void onRegisterFailed(Exception exception);
}
public RegisterRequest(Context context) {
mContext = context;
}
public void sendRegistration(String email, String password, RegisterFeedback feedback) {
String url = Constants.BASE_URL + Constants.REGISTRATION_URL;
Gson gson = new Gson();
mCredentials = new HashMap<>();
mCredentials.put("email", email);
mCredentials.put("password", password);
final RegisterFeedback registerFeedback = feedback;
GsonRequest<RegisterResponse> request = new GsonRequest<>(url, RegisterResponse.class, null,
Request.Method.POST, mCredentials, new Response.Listener<RegisterResponse>() {
@Override
public void onResponse(RegisterResponse response) {
registerFeedback.onRegisterSuccess(response);
PreferenceConnector.writeString(mContext, "authToken", response.getAccessToken());
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
registerFeedback.onRegisterFailed(error);
}
});
request.setRetryPolicy(new DefaultRetryPolicy(
10000,
DefaultRetryPolicy.DEFAULT_MAX_RETRIES,
DefaultRetryPolicy.DEFAULT_BACKOFF_MULT
));
RequestFactory.getInstance(mContext).addtoRequestQueue(request);
}
}

注册响应.java

@Parcel
public class RegisterResponse {
@SerializedName("id")
private String id;
@SerializedName("email")
private String email;
@SerializedName("username")
private String username;
@SerializedName("first_name")
private String firstName;
@SerializedName("last_name")
private String lastName;
@SerializedName("last_login")
private String lastLogin;
@SerializedName("email_confirmed")
private String emailConfirmed;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public String getLastLogin() {
return lastLogin;
}
public void setLastLogin(String lastLogin) {
this.lastLogin = lastLogin;
}
public String isEmailConfirmed() {
return emailConfirmed;
}
public void setEmailConfirmed(String emailConfirmed) {
this.emailConfirmed = emailConfirmed;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
}

Gson请求.java

public class GsonRequest<T> extends JsonRequest<T> {
private final Gson gson = new Gson();
private Map<String, String> bodyJson;
private final Class<T> clazz;
private Map<String, String> headers;
private Response.Listener<T> listener;
private static final String CONTENT_TYPE = "Content-Type";
private static final String PROTOCOL_CONTENT_TYPE =
String.format("application/x-www-form-urlencoded");
public GsonRequest(String url, Class<T> clazz, Map<String, String> headers, int method, @Nullable Map<String, String> bodyJson,
Response.Listener<T> listener, Response.ErrorListener errorListener) {
super(method, url, getFormDataString(bodyJson), listener, errorListener);
this.clazz = clazz;
this.listener = listener;
this.bodyJson = bodyJson;
if (headers == null) {
this.headers = new HashMap<>();
} else {
this.headers = headers;
}
this.headers.put("client-id", Constants.API_CLIENT_ID);
this.headers.put("client_secret", Constants.API_CLIENT_SECRET);
this.headers.put("Accept-Encoding", "gzip, deflate, sdch");
}
private static String getFormDataString(Map<String, String> formData){
StringBuilder params = new StringBuilder();
if (formData != null) {
for (String key : formData.keySet()) {
params.append("&").append(key).append("=").append(formData.get(key));
}
return params.toString().substring(1);
}else {
return null;
}
}
@Override
public Map<String, String> getParams() throws AuthFailureError {
return bodyJson != null ? bodyJson : super.getParams();
}
@Override
public Map<String, String> getHeaders() throws AuthFailureError {
return headers != null ? headers : super.getHeaders();
}
@Override
public String getBodyContentType() {
return PROTOCOL_CONTENT_TYPE;
}
@Override
protected void deliverResponse(T response){
listener.onResponse(response);
}
@Override
protected Response<T> parseNetworkResponse(NetworkResponse response) {
try {
String json;
String encoding = response.headers.get("Content-Encoding");
if (encoding != null && encoding.equals("gzip")) {
json = unpackData(response.data);
} else {
json = new String (
response.data, HttpHeaderParser.parseCharset(response.headers));
}
return Response.success(gson.fromJson(json, clazz), HttpHeaderParser.parseCacheHeaders(response));

} catch (UnsupportedEncodingException e) {
return Response.error(new ParseError(e));
} catch (JsonSyntaxException e) {
return Response.error(new ParseError(e));
}
}
private String unpackData(byte[] data) {
String output = "";
try {
GZIPInputStream gStream = new GZIPInputStream(new ByteArrayInputStream(data));
InputStreamReader reader = new InputStreamReader(gStream);
BufferedReader in = new BufferedReader(reader);
String read;
while ((read = in.readLine()) != null) {
output += read;
}
reader.close();
in.close();
gStream.close();
} catch (IOException e) {
return null;
}
return output;
}

}

任何帮助将不胜感激,提前感谢您:D

预期的 JSON 在"email_confirmed"之后的末尾有逗号:false, 请纠正它,然后重试。

最新更新