【问题标题】:Return Array instead of String from JSON从 JSON 返回数组而不是字符串
【发布时间】:2015-05-19 12:28:52
【问题描述】:

我正在序列化一个表单并像这样返回 JSON

var dataForm = JSON.stringify($('#form').serializeObject());

然后在我的操作类中,我使用 gson.fromJson() 创建一个 JSON 模型对象

SomeObj so = gson.fromJson(dataForm, SomeObj.class);

SomeObj 我有一个String 数组字段

public class SomeObj {
    private String[] someField;

    public String[] getSomeField() {
        return this.someField;
    }
    public void setSomeField(String[] someField) {
        this.someField = someField;
    }
}

我有几个名为 someField 的复选框。选择多个复选框时,将创建json数组并正确映射到模型类

例如

{"someField":["someValue1", "someValue2"]}

问题是当只有一个复选框被选中时,json 看起来像这样

{"someField":"someValue1"}

这将生成以下异常,因为它需要一个数组而不是 String

Caused by: java.lang.IllegalStateException: Expected BEGIN_ARRAY but was STRING

任何想法如何解决这个问题? someField 不是我返回的唯一值。还有BooleansStrings我省略了

【问题讨论】:

  • 试试 - var dataForm = JSON.stringify([$('#form').serializeObject()]);
  • 还有其他应该是字符串的值被返回
  • 所以如果它有一个键=>值它需要是一个数组对吗?不然就好了?
  • 没错。它是pojo上的一个数组
  • 汤姆,这怎么和其他问题重复了?

标签: java javascript arrays json gson


【解决方案1】:

我通过添加一个具有空值的隐藏字段来解决此问题。这不是一个非常优雅的解决方案,应该是一种更好的方法,但它确实有效

<input type="hidden" name="someField" value="">

【讨论】:

    猜你喜欢
    • 2018-09-20
    • 2019-01-19
    • 2018-07-03
    • 1970-01-01
    • 2011-09-20
    • 2012-11-26
    • 2022-12-06
    • 1970-01-01
    • 2013-05-16
    相关资源
    最近更新 更多