当将字符串变量传递给jasonparser时,jsonobject返回null
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了当将字符串变量传递给jasonparser时,jsonobject返回null相关的知识,希望对你有一定的参考价值。
要读取我在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"
}
]
}
答案
这是因为键名中的点没有达到预期的效果。您没有在原始帖子中显示您的JSON数据,但我可以推断出有一个包含id
密钥的顶级对象“管道”。 Groovy无法神奇地知道这一点,因此它将整个参数应用为顶级键,而不是复合深键。
另一答案
你总是试图从那张地图上得到关键的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
一个字符串 - 您可以在
.
“拆分”路径,然后在地图上缩小此列表 - 而不是Closure中的字符串传递,而是访问数据
以上是关于当将字符串变量传递给jasonparser时,jsonobject返回null的主要内容,如果未能解决你的问题,请参考以下文章
将变量名称传递给另一个函数中的 dplyr 函数会返回找不到对象错误