jsongroovyjsonslurper

Groovy: Correct invalid JSON as per XML specifications


I am trying to correct the Incoming JSON as I have a JSON to XML converter. I wish to replace the leading number in a field etc 1Doc1 to S_Doc1 etc. Also I Need to replace the invalid XML element names from JSON such as Slash etc. Here is my Code but it is not working:

def list = new JsonSlurper().parseText( payload )

list.each {
  def oldStr = "" + it
  def newStr = oldStr.replaceFirst("^[^a-zA-Z]+", "S_")
  payload = payload.replaceFirst(oldStr, newStr)   
 }
 return payload

I get the Input as is. Could anyone advise how to do this in Groovy. For example if my Input is:

{
"1Document1":
{"Record":{"Header"...….

The Output should be

{
"S_Document1":
{"Record":{"Header"......

Solution

  • You can use eachWithIndex and update the element in the list using key instead of trying to manipulate the input string:

    import groovy.json.JsonSlurper
    
    String json = '[{"1Document1": {"Record":{"Header": "xx"}}}, {"2Document1": {"Record":{"Header": "zz"}}}]'
    
    def list = new JsonSlurper().parseText( json )
    
    list.eachWithIndex {v, k ->
        def newStr = (""+v).replaceFirst("^[^a-zA-Z]+", "S_")
        list[k] = newStr
     }
    
     println list