【问题标题】:Android : Error in parsing JSON array using GSON library [duplicate]Android:使用 GSON 库解析 JSON 数组时出错 [重复]
【发布时间】:2012-07-26 09:38:36
【问题描述】:

可能重复:
GSON throwing “Expected BEGIN_OBJECT but was BEGIN_ARRAY”?

场景:我正在使用 GSON 库解析一个 JSON 格式的 API。这是我正在解析的 JSON 文件:

{
  "questions": [
    {
      "question_1": "Question 1",
      "options": [
        "option_1 : option1",
        "option_2 : option2",
        "option_3 : option 3",
        "option_4 : option 4"
      ]
    },
    {
      "question_2": "Question 2",
      "options": [
        "option_1 : option 1",
        "option_2 : option 2",
        "option_3 : option 3"
      ]
    }
  ]
}

我的对象类看起来像这样:

public class Practise_Question_Object {

    public List<Questions> questions;

    public class Questions {

        @SerializedName("question")
        public String Question;

        public List<Options> options;

        public class Options {

            public String Option_1;

            public String Option_2;

            public String Option_3;

            public String Option_4;
        }

    }

问题 我的问题是,每当我尝试解析值时,它都会显示错误java.lang.IllegalStateException: Expected BEGIN_OBJECT but was BEGIN_ARRAY at line 1 column 53

如果我将“选项”从 Array 更改为 Object,那么我可以轻松解析。但在我的项目中(从 PHP 端)我不能使用 Object。

【问题讨论】:

  • 你想把这个json传给服务器吗?
  • 不,我想从服务器解析这个 JSON。
  • 在PHP中,关联数组被编码为JSON中的对象……你不能使用关联数组吗? (无论如何,PHP 中只有一种类型的数组)。为您的数据创建一个适当的表示,看来您无论如何都不想要一个数组。
  • @QVDev :我的问题不一样。
  • 我对 GSON 不太熟悉,但是您的 Java 类似乎与您的 JSON 不匹配。你告诉 GSON options 是一个 Options 对象数组,其中每个 Option 有 4 个字符串属性。但事实并非如此,options 是一个由 4 个字符串组成的数组。不过我可能完全错了......

标签: android json gson android-parser


【解决方案1】:

如果你改变这一行会怎样:

public List<Options> options;

到:

public Options[] options;

您的 JSON 似乎包含一个 Options 对象数组。


否则我可以建议发布您在 Web 服务中使用的实际代码,以确认您使用的是 GSOM DOM 样式的自动解析。

【讨论】:

  • 非常感谢。我使用 public String[] options; 而不是 public Options[] options; 并且我的问题解决了。很好的答案。再次感谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-08-26
  • 2021-12-23
  • 1970-01-01
  • 2013-08-27
  • 1970-01-01
  • 2020-10-08
相关资源
最近更新 更多