【发布时间】: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)是否称为SNPID或getSNPID? -
是的,这正是问题所在。我在整理现在问题中的简化示例时解决了这个问题。我没有考虑过它必须使用 getter,因此猜测我使用什么约定来命名变量。
标签: json groovy jsonbuilder