【问题标题】:Groovy JsonBuilder capitalising field namesGroovy JsonBuilder 大写字段名称
【发布时间】:2015-12-09 12:21:55
【问题描述】:

我正在使用 Groovy JsonBuilder 生成 JSON 以通过 HTTP 发送。 我的问题是它在给定的地图中大写了一些键。

我给它一个此类的对象:

public class TestSNP {
    private String snpID;

    TestSNP(String input) {
        snpID = input.split("\\s+")[1];
    }

    String getSNPID() {
        return snpID;
    }
}

这是失败的测试:

import groovy.json.*

class Test {
    @Test
        void jsonBuilderTest() {
            def testSNP = new TestSNP("1 rs444444 2 3")
            assert new groovy.json.JsonBuilder(testSNP).toString() == '{"snpID":"rs444444"}'
        }
}

我明白了

{"SNPID":"rs444444"}

而不是

{"snpID":"rs444444"}

(这是一个演示我的问题的简化示例)

【问题讨论】:

  • @tim_yates 这可能很有用,不是吗。我已经添加了导致问题的行。谢谢。
  • 答案是:它没有... Groovy 没有将条目大写。他们将保留他们在地图中的任何大小写......即:assert new groovy.json.JsonBuilder([[snps:[[snpID:'rs444444']]]]).toString() == '[{"snps":[{"snpID":"rs444444"}]}]' 在 Groovy 中可以正常工作
  • 谢谢,确实有效。表明问题出在我的班级,如:assert new groovy.json.JsonBuilder([[snps:[new domain.SNP("1 rs444444 2 3")]]]).toString() == '[{"snps ":[{"allele1":null,"position":2,"valid":true,"basePairCoordinate":3,"allele2":null,"snpID":"rs444444","chromasome":"1"} ]}]' 不起作用。我会看看我是否可以制定一个具有相同问题的简化示例,以节省把我的整个班级都放在这里。
  • 您的SNP 类中的字段(或getter)是否称为SNPIDgetSNPID
  • 是的,这正是问题所在。我在整理现在问题中的简化示例时解决了这个问题。我没有考虑过它必须使用 getter,因此猜测我使用什么约定来命名变量。

标签: json groovy jsonbuilder


【解决方案1】:

变化:

String getSNPID() {
    return snpID;
}

到:

String getSnpID() {
    return snpID;
}

它会按照你的预期工作

【讨论】:

  • 可能还值得注意的是,它还会查找 isSomething() 方法并将添加一个布尔“某物”变量。
  • 是的,它遵循 Java Beans 的 getter 命名规范 :-)
猜你喜欢
  • 1970-01-01
  • 2013-06-25
  • 1970-01-01
  • 2014-02-17
  • 1970-01-01
  • 2016-07-11
  • 1970-01-01
  • 2013-05-16
  • 2014-09-06
相关资源
最近更新 更多