2014-12-15 2 views
-2

У меня проблема, преобразующие струны «[3]» здесь:Как преобразовать строку в список в Groovy

p = {"results":["[3]","[3]"],"success":true,"version":"2.4.0","queryTime":63.102287} 

в списки.

р [0] дает мне:

{"results":["[3]"],"success":true,"version":"2.4.0","queryTime":68.24303} 

Так что я думал, что я мог бы использовать Eval.me (р [0]), но Тхет дает мне ошибку говоря:

{"message":"","error":"javax.script.ScriptException: groovy.lang.MissingMethodException: No signature of method: static groovy.util.Eval.me() is applicable for argument types: (com.tinkerpop.gremlin.groovy.GremlinGroovyPipeline) values: [[GremlinStartPipe, GraphQueryPipe(has,vertex), IdentityPipe, PropertyPipe(Sannolikhet), RangeFilterPipe(0,0)]]\nPossible solutions: me(java.lang.String), me(java.lang.String, java.lang.Object, java.lang.String), is(java.lang.Object), use([Ljava.lang.Object;), _(groovy.lang.Closure), dump()","api":{"description":"evaluate an ad-hoc Gremlin script for a graph.","parameters":{"rexster.returnKeys":"an array of element property keys to return (default is to return all element properties)","rexster.showTypes":"displays the properties of the elements with their native data type (default is false)","load":"a list of 'stored procedures' to execute prior to the 'script' (if 'script' is not specified then the last script in this argument will return the values","rexster.offset.end":"end index for a paged set of data to be returned","rexster.offset.start":"start index for a paged set of data to be returned","params":"a map of parameters to bind to the script engine","language":"the gremlin language flavor to use (default to groovy)","script":"the Gremlin script to be evaluated"}},"success":false} 

Любой который знает, как это можно сделать без использования Eval.me?

EDIT

Чтобы уточнить, первая часть моего сценария:

p = g.V('containerName','CvsRisk').outE.inV.hasNot('Sannolikhet',null).'Sannolikhet'; 

я «извлечь» все вершины в контейнере с ИмяКонтейнера CvsRisk, который имеет свойство с именем «Sannolikhet» что не является нулевым. Выполнение этой части сценария дает мне следующий ответ от сервера:

{"results":["[3]","[3,3]","[3,3]","[3,3]","[3,3]","[3,3]","[3,3]","[3]","[3,3]","[3]","[3,3]","[3,3]"],"success":true,"version":"2.4.0","queryTime":20.429118} 

Что я хочу, так как все мои свойства названных «Sannolikhet» содержит массив значений.

Оттуда я хочу перебирать результат и суммировать значения в строках, но для этого мне нужно преобразовать строки в списки.

+1

так белый по коду вы используете прямо сейчас? – cfrick

+0

Я пытался использовать Eval.me, но это не работает, или что вы имеете в виду? – agiledevpro

+1

В первую очередь вы конвертируете экземпляр класса GremlinGroovyPipeline, а не 'String'. так что вам нужно сделать следующее: 'Eval.me (p [0] .toString())' – injecteer

ответ

0

Вы можете разобрать полученный JSON с JsonSlurper и собирать results с Eval применяется. Если вы уверены, что не существует никакого метода готов получить значение в гном, то я думаю, вы должны работать с чем-то вроде этого:

Update: на второй мысли, p.results должны, вероятно, работать хорошо, забыть первый две строки комментария:

//result='{"results":["[3]","[3,3]","[3,3]","[3,3]","[3,3]","[3,3]","[3,3]","[3]","[3,3]","[3]","[3,3]","[3,3]"],"success":true,"version":"2.4.0","queryTime":20.429118}' 

//json = new groovy.json.JsonSlurper().parseText result 

p = ["results":["[3]","[3,3]","[3,3]","[3,3]","[3,3]","[3,3]","[3,3]","[3]","[3,3]","[3]","[3,3]","[3,3]"]] 

assert p.results.size() == 12 

vertices = p.results.collect { Eval.me(it) } 

assert vertices.size() == 12 

assert vertices[0] == [3] 
assert vertices[1] == [3, 3] 
assert vertices[-3] == [3] 
assert vertices[-1] == [3, 3] 
+0

Спасибо за ваш ответ, но p.results не работает. Выполнение p.results приводит к ошибке «сообщение»: «», «ошибка»: «java.lang.String не может быть передан в com.tinkerpop.blueprints.Element» – agiledevpro

0

я нашел решение

весь раствор:

def p = g.V('containerName','CvsRisk').outE.inV.hasNot('Sannolikhet',null).'Sannolikhet'; 
    m= [];for(i in p){m.add(Eval.me(i));};k=m.sum();k*.toInteger().sum()