如何修复 Android Studio 中的“使用 JsonReader.setLenient(true) 在第 1 行第 1 列路径 $ 处接受格式错误的 JSON”错误

Posted

技术标签:

【中文标题】如何修复 Android Studio 中的“使用 JsonReader.setLenient(true) 在第 1 行第 1 列路径 $ 处接受格式错误的 JSON”错误【英文标题】:How to fix 'Use JsonReader.setLenient(true) to accept malformed JSON at line 1 column 1 path $' error in Android Studio 【发布时间】:2020-02-08 17:18:37 【问题描述】:

我正在尝试将数据发布到 API,但出现此错误:

使用 JsonReader.setLenient(true) 在第 1 行第 1 列路径 $ 处接受格式错误的 JSON

有人知道如何解决这个问题吗?

在活动中发布数据的代码

private void callList()
    String signature = new String(Hex.encodeHex(DigestUtils.md5(
            TMK + appId + appVersion +
                    SessionManager.getSession(getApplicationContext(), getString(R.string.session_token)))
    ));

    Call<PostGetList> postGetListCall = mApiInterface.postGetList(
            appId,
            appVersion,
            SessionManager.getSession(getApplicationContext(), getString(R.string.session_token)),
            signature);

    postGetListCall.enqueue(new Callback<PostGetList>() 
        @Override
        public void onResponse(Call<PostGetList> call, Response<PostGetList> response) 
            status = response.body().getStatus();
            Utils.logcat("Recv getInfo Status " + status);
            if (status.equals(getString(R.string.rc00))) 
                Message.message(getApplicationContext(), "Success");
             else 
                Message.message(getApplicationContext(), status);
            
        

        @Override
        public void onFailure(Call<PostGetList> call, Throwable t) 
            String responseMsg = "Fail to connect";
            Utils.logcat(responseMsg);
            Toast.makeText(getApplicationContext(), responseMsg, Toast.LENGTH_LONG).show();
            Utils.logcat(t.toString());
        
    );

ApiInterface.java

@FormUrlEncoded
@POST("List.php")
Call<PostGetList> postGetList(@Field("appId") String appId,
                              @Field("appVersion") String appVersion,
                              @Field("token") String token,
                              @Field("signature") String signature);

PostGetList.java

public class PostGetList 
    @SerializedName("status")
    String status;
    @SerializedName("data")
    String data;

    public String getStatus() 
        return status;
    
    public void setStatus(String status) 
        this.status = status;
    

    public String getData() 
        return data;
    
    public void setData(String data) 
        this.data = data;
    

API 应该返回

 “status”:”00”,
  ”data”:”List Data”

【问题讨论】:

【参考方案1】:

您确定您的 json 响应格式不正确吗? 请在 https://jsonlint.com/ 之类的网站上验证您的回复,看看您的回复是否是正确的 json。

【讨论】:

【参考方案2】:

模型 PostGetListKredit 是匹配 json,但您使用的响应是 PostGetList - 而不是 PostGetListKredit。 尝试:将 PostGetList 更改为 PostGetListKredit

【讨论】:

你应该改变对 JsonObject 的响应 - 为了确定响应的格式,我认为上面的 json 不正确。【参考方案3】:

设置标题,

@Headers("Content-Type: application/json")

并且还使用Gson进行json转换,

make sure that you have:
   compile 'com.google.code.gson:gson:2.6.1'

Gson gson = new GsonBuilder()
        .setLenient()
        .create();

Retrofit retrofit = new Retrofit.Builder()
        .baseUrl(BASE_URL)
        .client(client)
        .addConverterFactory(GsonConverterFactory.create(gson))
        .build();

如需更详细的答案,请关注link

【讨论】:

已阅读该线程,但需要更改 API 响应。对于 API 发送的响应 JSON,我无能为力。我无法改变它。

以上是关于如何修复 Android Studio 中的“使用 JsonReader.setLenient(true) 在第 1 行第 1 列路径 $ 处接受格式错误的 JSON”错误的主要内容,如果未能解决你的问题,请参考以下文章

如何修复 Android Studio / SQLite 中的“空对象引用”错误? [复制]

如何修复 Android Studio 中的 React Native 应用程序错误?

如何修复 Android Studio 中的 INSTALL_FAILED_INVALID_APK 错误?

如何修复 Android Studio 中的 Lottie 错误 - 'Error:Execution failed for task' java.lang.RuntimeException [...

如何在运行应用程序时修复 android studio 版本 3.6.2 中的“无法解析结果路径字符串:”错误?

如何使用 Android Studio 3.3 修复即时应用程序