Search code examples
jsongroovyexport-to-csv

Groovy JSON convert to CSV


I have a problem with parsing Json by JsonSlurper in groovy. Could you help? my example json is:

{
   "expand": "schema,names",
   "startAt": 0,
   "maxResults": 50,
   "total": 21,
   "issues":    [
            {
         "expand": "operations,versionedRepresentations",
         "id": "217580",
         "self": "issue/217580",
         "key": "ART-4070",
         "fields": {"summary": "#[ART] Pre.3 Verification \"S\""}
      },
            {
         "expand": "operations,versionedRepresentations",
         "id": "217579",
         "self": "issue/217579",
         "key": "ART-4069",
         "fields": {"summary": "Verification \"C\""}
      },
            {
         "expand": "operations,versionedRepresentations",
         "id": "217577",
         "self": "issue/217577",
         "key": "ART-4068",
         "fields": {"summary": "#[ART] Enum type"}
      },
   ]
}

in a result I'm expecting a csv file with list of key,summary only:

key,summary
ART-4070,#[ART] Pre.3 Verification \"S\"
ART-4069,Verification \"C\"
ART-4068,#[ART] Enum type

when I'm trying on a beginning of code parse this json I have an error: Exception in thread "main" groovy.json.JsonException: expecting '}' or ',' but got current char 'S' with an int value of 83

The current character read is 'S' with an int value of 83 expecting '}' or ',' but got current char 'S' with an int value of 83 line number 13 index number 321 "fields": {"summary": "#[ART] Pre.3 Verification "S""}

code:

import groovy.json.*

def jsonSlurper = new JsonSlurper()
def json = '''
{
   "expand": "schema,names",
   "startAt": 0,
   "maxResults": 50,
   "total": 21,
   "issues":    [
            {
         "expand": "operations,versionedRepresentations",
         "id": "217580",
         "self": "issue/217580",
         "key": "ART-4070",
         "fields": {"summary": "#[ART] Pre.3 Verification \"S\""}
      },
            {
         "expand": "operations,versionedRepresentations",
         "id": "217579",
         "self": "issue/217579",
         "key": "ART-4069",
         "fields": {"summary": "Verification \"C\""}
      },
            {
         "expand": "operations,versionedRepresentations",
         "id": "217577",
         "self": "issue/217577",
         "key": "ART-4068",
         "fields": {"summary": "#[ART] Enum type"}
      },
   ]
}
'''
def obj = jsonSlurper.parseText(json)
println obj

please help


Solution

  • First: You need double \\ inside ''' strings; second there is a , on the last element of the list.

    import groovy.json.JsonSlurper
    
    def jsonSlurper = new JsonSlurper()
    def json = '''
    {
       "expand": "schema,names",
       "startAt": 0,
       "maxResults": 50,
       "total": 21,
       "issues":    [
                {
             "expand": "operations,versionedRepresentations",
             "id": "217580",
             "self": "issue/217580",
             "key": "ART-4070",
             "fields": {"summary": "#[ART] Pre.3 Verification \\"S\\""}
          },
                {
             "expand": "operations,versionedRepresentations",
             "id": "217579",
             "self": "issue/217579",
             "key": "ART-4069",
             "fields": {"summary": "Verification \\"C\\""}
          },
                {
             "expand": "operations,versionedRepresentations",
             "id": "217577",
             "self": "issue/217577",
             "key": "ART-4068",
             "fields": {"summary": "#[ART] Enum type"}
          }
       ]
    }
    '''
    def obj = jsonSlurper.parseText(json)
    println obj