要读取我在groovy中创建的方法下面的json文件。我是从另一个班级打来的。
class WUPage{
@Shared
String fileContents ;
def jsonSlurper ;
def jsonObject ;
public String getValueFromJsonFile(String fileName, String jsonKey){
fileContents = new File(fileName).getText('UTF-8')
jsonSlurper = new JsonSlurper()
jsonObject = jsonSlurper.parseText(fileContents)
println " Json Key from method is : " + jsonObject.jsonKey
println " Json Key hardecoded is : " + jsonObject.pipe.id
return jsonObject.jsonKey
}
}
当我从另一个类调用此方法时,我正在传递文件名及其键,如下所示
getValueFromJsonFile(jsonFIleName, "pipe.id")
我的输出低于输出
Json Key from method is : null
Json Key hardecoded is : [India]
当键是硬编码时,从上面输出第二行是正确的。它似乎无法识别来自方法参数的密钥。
你可以帮我解决这个问题。
Json文件是:
{
"source": [
{
"id": "manish",
"type": "csv",
"path": "/home/surya/f1.txt",
"delimiter": ",",
"tableName": "table1",
"schema": "f1,f2,f3,f4,f5"
}
],
"pipe": [
{
"id": "India",
"sql": "select f1,f2,f5 from table1"
}
],
"sinks": [
{
"id": "output1",
"type": "aaa",
"path": "/home/surya/out",
"format": "json"
}
]
}
答案 0 :(得分:0)
这是因为键名中的点没有达到预期的效果。您没有在原始帖子中显示您的JSON数据,但我可以推断出存在包含id
键的顶级对象“管道”。 Groovy无法神奇地知道这一点,因此它将整个参数应用为顶级键,而不是复合深键。
答案 1 :(得分:0)
您正试图始终从该地图获取密钥jsonKey
。
def json = [a: [b: 42]] // just some map, but that's what your JsonSlurper result is
def key = 'a' // start with a simple key
println json.key // wont work, because groovy will access the key `key`
// => null
println json."$key" // works, now
// => [b:42]
key = 'a.b'
println json."$key" // wont work, because you can not access recursive keys like that
// => null
所以在这一点上你必须决定,做什么以及你的路径可以变得多么复杂以及路径的来源是什么(例如,总是来自其他地方的字符串,或者这是为了方便开发人员)。
Eval
一个字符串.
“分割”路径,然后在地图上缩小此列表