wanderors
wanderors

Reputation: 2292

groovy to get the json key values to a string

I have a json file with values - {"testID":"smoke_01","testID":"smoke_02","testID":"smoke_04"}.

I read the values for testID and saved to array. Now I was trying to make it as a simple string like -

testcase = smoke_01,smoke_02,smoke_02. My code is below :

 def props = readJSON file: 'input.json'
        def list = []
        props.each { key, value ->
            list.push("$value")
        }
        echo "$list"
        def asString = list.join(", ")
        def testcase = asString.join(", ")

But when i print testcase - its printing as [smoke_01, smoke_02, smoke_04] . Please help me to understand where I am wrong.

Upvotes: 0

Views: 965

Answers (1)

Renato
Renato

Reputation: 13690

Assuming you really have this invalid strange JSON (keys must be unique in an Object in basically every language you parse to, but yours are not), and that readJSON actually parses your custom JSON into something you can iterate over as if it were a Map... then, this should do what you want:

    def props = readJSON file: 'input.json'
    def testCase = props.values().join(', ')
    println testCase

Assuming you use proper JSON

By proper JSON I mean something that does not break JSON semantics, hence can be parsed by any JSON parser, not your custom one.

You JSON file should look more like this:

{ "tests": [
  { "testID": "smoke_01" },
  { "testID": "smoke_02" },
  { "testID": "smoke_03" }
] }

In which case you would parse it with:

def json = new JsonSlurper().parse(new File('input.json'))
def testCase = json.tests.collect { it.testID }.join(', ')
println testCase

There are other ways to represent this in JSON, but you should study how JSON works and what suits you best depending on how it is going to be used.

Here's the JSON spec which is simple enough you can learn it in 20 minutes:

https://www.json.org/json-en.html

Upvotes: 1

Related Questions