从aws dynamodb解析json

时间:2017-10-11 15:58:57

标签: json amazon-dynamodb

我从AWS DynamoDB收到JSON。 我无法访问嵌套项目。

我试图检索两个字段,' session_nr'和来自此JSON的' session_type_name':

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

        }

2 个答案:

答案 0 :(得分: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>

答案 1 :(得分: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"));
        }