【问题标题】:Android json/gson deserializationAndroid json/gson 反序列化
【发布时间】:2012-02-10 00:15:55
【问题描述】:

我正在尝试解析从我的 php 文件中收到的以下 json 数组:

actionsArray = [["19.431","19.438"],[["8","107"],[]],["u1","u2"]]

我主要对访问数组 [["8","107"],[]]; 感兴趣但是,我收到错误消息“com.google.gson.JsonParseException:期望数组但找到对象:名称:null Grams:null 0 Actions:null

这是我的代码的摘录:

用户类包含:字符串名称; int[] 动作;字符串克数

            JSONArray inputarray;
            try {
                int[] userActionsArray = new int[0];
                inputarray = new JSONArray(br.readLine());

                JSONArray gramsArray = (JSONArray)inputarray.get(0);
                JSONArray actionsArray = (JSONArray)inputarray.get(1);
                JSONArray namesArray = (JSONArray) inputarray.get(2);

                User[] values = new User[namesArray.length()];

                Gson gson = new Gson();
                *User userAction = gson.fromJson(inputarray.toString(), User.class); 
                //error occurs on the above line*
                ...

【问题讨论】:

    标签: android arrays json gson


    【解决方案1】:

    当您尝试解析数组但服务作为对象响应时,通常会出现此问题。所以首先测试你得到的响应,然后尝试相应地解析。

    【讨论】:

      【解决方案2】:

      JSONArray 来自 org.json,.toString() 方法将其返回为 ["first","second"](源可用 here

      您需要您的 JSON 看起来像:{ myArray : [ "first", "second" ] } 以便 Gson 解析它...您的 POJO(在您的情况下为 User.class)应该看起来像这样:

      public User {
       String[] myArray;
      }
      

      【讨论】:

      • 您好,感谢您的回复。这是有道理的,但我不确定让我的 JSONArray 遵循您指定的格式 { myArray : ["first", "second"] } 的正确方法是什么。你能指出我正确的方向吗?
      • 你能创建一个循环并打印所有的行,这样我们就可以看到整个 JSON 了吗? (只需循环 br.readLine() 并将其打印出来)。还是您手动生成 JSON?
      • 我在使用 ArrayList 对象后解决了这个问题。我放弃了 gson 并保留了 JSONArrays。我从一个 php 文件中检索了 JSONArray。感谢您的帮助 (+1)。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-07-11
      • 1970-01-01
      • 1970-01-01
      • 2017-01-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多