2017-05-07 2 views
0

Essayer de lire et de transformer un fichier JSON où le fichier d'entrée a:Aplatir JSON lu avec JsonSlurper

{ 
    "id": “A9”, 
    "roles": [ 
    {"title": “A”, “type”: “alpha” }, 
    {"title": “B”, “type”: “beta” }, 
    ] 
}, 

{ 
    "id": “A10”, 
    "roles": [ 
    {"title": “D”, “type”: “delta” }, 
    ] 
}, 

Mais nécessite une transformation d'une bibliothèque qui attend des valeurs au même niveau:

{ 
    "roles": [ 
    {"id": “A9”, "title": “A”, “type”: “alpha” }, 
    {"id": “A9”, "title": “B”, “type”: “beta” }, 
    ] 
}, 

{ 
    "roles": [ 
    {"id": “A10”, "title": “D”, “type”: “delta” }, 
    ] 
}, 

Je suis capable de lire l'entrée avec JsonSlurper, mais je suis resté sur la façon de le dénormaliser.

Répondre

1

Avec cette data.json (avis que je devais nettoyer de fuite des virgules comme l'analyseur de JSON Groovy ne les accepteront pas):

{ 
    "records":[{ 
    "id": "A9", 
    "roles": [ 
     {"title": "A", "type": "alpha" }, 
     {"title": "B", "type": "beta" } 
    ] 
    }, 
    { 
    "id": "A10", 
    "roles": [ 
     {"title": "D", "type": "delta" } 
    ] 
    }] 
} 

Vous pouvez le faire de cette façon:

def parsed = new groovy.json.JsonSlurper().parse(new File("data.json")) 
def records = parsed.records 
records.each { record -> 
    record.roles.each { role -> 
    role.id = record.id 
    } 
    record.remove('id') 
}