当将字符串变量传递给jasonparser时,jsonobject返回null

时间:2018-03-01 05:06:15

标签: json groovy

要读取我在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"
    }

  ]
}

2 个答案:

答案 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一个字符串
  • 您可以在.“分割”路径,然后在地图上缩小此列表
  • 而不是Closure中的字符串传递,它访问数据