Java android moshi 解析Json到Object

标签 java android json

我使用 moshi 将 Json 解析为 Object 。这是我的 JSon:

[{
   "id": 4,
   "phone":    {
      "id": 3,
      "imei": "356938035643801",
      "description": "Marek Kowalski"
   },
   "user":    {
      "id": 3,
      "username": "marek.kowalski",
      "first_name": "Marek",
      "last_name": "Kowalski"
   },
   "user_id": 3,
   "message": "Podejrzane zachowanie, sprawdĹş.",
   "date_time_data": "2017-09-05T22:26:44.916927Z",
   "longitude": 19.934113,
   "latitude": 50.075086,
   "confirm": 0,
   "changetime": "2017-09-05T22:26:44.930357Z",
   "has_coordinates": 1
}]

这是我的对象:

public class Message {

    String message;
    double longitude;
    double latitude;
    int confirm;

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }

    public double getLongitude() {
        return longitude;
    }

    public void setLongitude(double longitude) {
        this.longitude = longitude;
    }

    public double getLatitude() {
        return latitude;
    }

    public void setLatitude(double latitude) {
        this.latitude = latitude;
    }

    public int getConfirm() {
        return confirm;
    }

    public void setConfirm(int confirm) {
        this.confirm = confirm;
    }
}

我这样做是为了将 JSON 解析为 obecjt:

 Message message = App.getMsg().fromJson(new String(responseBody, "UTF-8"));

但是我的应用程序崩溃了,在日志中我看到了这个:

User-space exception detected! com.squareup.moshi.JsonDataException: Expected BEGIN_OBJECT but was BEGIN_ARRAY at path $ at com.squareup.moshi.BufferedSourceJsonReader.beginObject(BufferedSourceJsonReader.java:171) at com.squareup.moshi.ClassJsonAdapter.fromJson(ClassJsonAdapter.java:145) at com.squareup.moshi.JsonAdapter$1.fromJson(JsonAdapter.java:68) at com.squareup.moshi.JsonAdapter.fromJson(JsonAdapter.java:33) at com.squareup.moshi.JsonAdapter.fromJson(JsonAdapter.java:37) at jaceknikiel.apk.MsgActivity$1.onSuccess(MsgActivity.java:37) at com.loopj.android.http.AsyncHttpResponseHandler.handleMessage(AsyncHttpResponseHandler.java:351) at com.loopj.android.http.AsyncHttpResponseHandler$ResponderHandler.handleMessage(AsyncHttpResponseHandler.java:510) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:154) at android.app.ActivityThread.main(ActivityThread.java:6692) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1468) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1358)

最佳答案

问题是您要求一个 Message 对象,但实际上您有一个 Message 对象的数组。尝试这样做:

String jsonResponseBody = ...;
Type type = Types.newParameterizedType(List.class, Message.class);
JsonAdapter<List<Message>> adapter = moshi.adapter(type);
List<Message> messages = adapter.fromJson(jsonResponseBody);

关于Java android moshi 解析Json到Object,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46131226/

相关文章:

Java - 尽管类存在但出现 NoClassDefFoundError

android - 有没有办法让我在 React Native 中创建一个文件夹并将 JSON 文件放入 Android 和 iOS 的移动本地存储中?

json - ConvertFrom-Json 将小写 e 转换为大写字母(有时)

ios - iOS 中的 JSON 值 POST?

java - 是否可以使用 Sikuli 进行 JUnit 测试并在失败时截取屏幕截图?

java - 运行 ElasticSearch 真的需要 JAVA_HOME 环境变量吗?

android - 从 Mime 类型获取图标,该图标看起来与 Android 中文件应用程序中的图标一模一样

asp.net - jQuery HighCharts 和 MVC 2 应用程序中的简单条形图?

java - libgdx 中的输入处理器/多路复用器

java - 需要找到线程错误