我的Groovy脚本正在创建一个如下所示的JSON文件:
hsps数组中有可变数量的元素。基本上,我的输出是正确的,但脚本会为元素添加不必要的引号。相关代码如下所示:
foundPlasmids.each {
def tempHSPs = []
it.hsps.each{
def hsps = JsonOutput.toJson(
[bit_score: it.bit_score,
evalue: it.evalue,
score: it.score,
query_from: it.query_from,
query_to: it.query_to,
hit_from: it.hit_from,
hit_to: it.hit_to,
align_len: it.align_len,
gaps: it.gaps]
)
tempHSPs << JsonOutput.prettyPrint(hsps)
}
def output = JsonOutput.toJson(
[contig: it.contig, title: it.title, accNumber: it.accession, length: it.length, noHSPs: it.noHsps, hsps: tempHSPs]
)
prettyOutput << JsonOutput.prettyPrint(output)
}
foundPlasmids
是包含所有信息的哈希,包括hsps
数组。我prettyPrint
将所有hsps
数组tempHSPs
加入tempHSPs
并将output
传递给hsps
。我无法弄清楚为什么添加了额外的引号,并且无法想出将output
数组传递到class Swipe {
constructor(element) {
this.xDown = null;
this.yDown = null;
this.element = typeof(element) === 'string' ? document.querySelector(element) : element;
this.element.addEventListener('touchstart', function(evt) {
this.xDown = evt.touches[0].clientX;
this.yDown = evt.touches[0].clientY;
}.bind(this), false);
}
onLeft(callback) {
this.onLeft = callback;
return this;
}
onRight(callback) {
this.onRight = callback;
return this;
}
onUp(callback) {
this.onUp = callback;
return this;
}
onDown(callback) {
this.onDown = callback;
return this;
}
handleTouchMove(evt) {
if ( ! this.xDown || ! this.yDown ) {
return;
}
var xUp = evt.touches[0].clientX;
var yUp = evt.touches[0].clientY;
this.xDiff = this.xDown - xUp;
this.yDiff = this.yDown - yUp;
if ( Math.abs( this.xDiff ) > Math.abs( this.yDiff ) ) { // Most significant.
if ( this.xDiff > 0 ) {
this.onLeft();
} else {
this.onRight();
}
} else {
if ( this.yDiff > 0 ) {
this.onUp();
} else {
this.onDown();
}
}
// Reset values.
this.xDown = null;
this.yDown = null;
}
run() {
this.element.addEventListener('touchmove', function(evt) {
this.handleTouchMove(evt).bind(this);
}.bind(this), false);
}
}
的不同方法。
谢谢你的帮助。
答案 0 :(得分:0)
您放入tempHSPs数组的对象是JSON的字符串表示形式,它们是由prettyPrint函数生成的。 JsonOutput中的所有toJson函数都返回字符串,而prettyPrint接受一个字符串,对其进行格式化并返回一个字符串。
你
这有两个问题。
一个是通过调用def output = JsonOutput.toJson
没有正确转义字符串,我只能假设它是JsonOutput类中的错误?这似乎不太可能,但我没有更好的解释。它应该看起来更像......
[
{
"nohsps": 1,
"hsps": [
"{\r\n \"bit_score\": 841.346,\r\n \"evalue\": 0,\r\n (and so on)\r\n}"
]
},
{
"nohsps": 6,
"hsps": [
"{\r\n \"bit_score\": 767.48,\r\n \"evalue\": 0,\r\n (and so on)\r\n}"
]
}
]
第二个问题是听起来你不想要字符串而是想要JSON对象,所以只需停止将你的Groovy对象变成字符串......
def tempHSPs = []
it.hsps.each{
def hsps =
[bit_score: it.bit_score,
evalue: it.evalue,
score: it.score,
query_from: it.query_from,
query_to: it.query_to,
hit_from: it.hit_from,
hit_to: it.hit_to,
align_len: it.align_len,
gaps: it.gaps]
)
tempHSPs << hsps
}
或,如果你想简化它,删除所有关于tempHSP的东西,让JsonObject自动序列化它们,看看它自动出现了什么:
def output = JsonOutput.toJson(
[contig: it.contig, title: it.title, accNumber: it.accession, length: it.length, noHSPs: it.noHsps, hsps: foundPlasmids*.hsps ]
)
(我还没有验证这种语法;我只是在处理内存。)
如果它在hsps对象上窒息或者您不喜欢结果输出(例如,如果要删除或重命名某些属性),请继续像现在一样制作地图。