2017-10-11 3 views
0

Je reçois JSON d'AWS DynamoDB. J'ai des problèmes pour accéder aux éléments imbriqués.parse json de aws dynamodb

Im essayant de récupérer deux champs, 'session_nr' et 'session_type_name', de cette JSON:

{content={S: {"session_nr":"PG8","session_name":"Title of this session","session_type_name":"blah blah name type"},}} 

Voici comment chaque enregistrement apparaît. Jusqu'à présent, c'est le code que j'ai, en utilisant un AWS ScanResult:

ScanRequest scanRequest = new ScanRequest() 
         .withTableName("table_name") 
         .withFilterExpression("field = :val") 
         .withProjectionExpression("content") 
         .withExpressionAttributeValues(expressionAttributeValues); 

     ScanResult scanResult = client.scan(scanRequest); 


     for (Map<String, AttributeValue> item : scanResult.getItems()) { 

      System.out.println(item); 

     } 

Répondre

1

Les valeurs JSON peuvent être obtenir comme suit. J'ai utilisé la classe ObjectMapper de la bibliothèque Jackson pour convertir JSON en Map.

Veuillez ajouter du code pour gérer l'exception en conséquence.

Map<String, Object> jsonMap = objectMapper.readValue(item.get("content").getS(), Map.class); 
System.out.println(jsonMap.get("session_nr")); 
System.out.println(jsonMap.get("session_name")); 

Jackson Dépendance: -

<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind --> 
<dependency> 
    <groupId>com.fasterxml.jackson.core</groupId> 
    <artifactId>jackson-databind</artifactId> 
    <version>2.9.1</version> 
</dependency> 
+0

Je reçois déjà une carte dans la déclaration. Dans tous les cas, en essayant votre suggestion, obtenez une erreur avec cette ligne: Map map = ObjectMapper.class.readValue (item.get ("contenu"). GetS(), nouveau TypeReference >() {}); –

+0

Quelle erreur obtenez-vous? – notionquest

1

Voici ce qui fonctionne. Merci @notionquest

ObjectMapper mapper = new ObjectMapper(); 
     for (Map<String, AttributeValue> item : scanResult.getItems()) { 

      Map<String, Object> map = mapper.readValue(item.get("content").getS(), new TypeReference<Map<String,Object>>(){}); 
      System.out.println(map.get("session_nr")); 
     }