2017-10-11 62 views
0

我正在從AWS DynamoDB接收JSON。 我無法訪問嵌套的項目。從aws dynamodb解析json

我試着檢索兩個領域, 'session_nr' 和 'session_type_name',從這個JSON:

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

這是怎麼每個記錄出現。 到目前爲止,這是我的代碼有,使用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); 

     } 

回答

1

的JSON值可以得到如下。我使用Jackson庫中的ObjectMapper類將JSON轉換爲Map。

請添加代碼以相應地處理異常。

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")); 

傑克遜相關性: -

<!-- 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

我已經收到了回報地圖。在任何情況下,嘗試你的建議,用這一行得到一個錯誤:Map map = ObjectMapper.class.readValue(item.get(「content」)。getS(),new TypeReference >(){}); –

+0

你收到了什麼錯誤? – notionquest

1

這是什麼工作。謝謝@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")); 
     }