当将字符串变量传递给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 函数会返回找不到对象错误

结构中的 Golang 通道:传递给函数时可以是定向的吗?

js变量传递给json

将视图(php文件)作为字符串传递给yii 2中registerJS中的变量js

按值传递/指针/引用说明

将 django 模板变量传递给 js 数据表