使用Java将DynamoDB JSON转换为标准JSON

我需要将AWS DYNAMODB JSON转换为标准JSON对象。 所以我可以从DynamoDB JSON中删除数据类型更像是:

在DYNAMODB JSON中:

"videos": [ { "file": { "S": "file1.mp4" }, "id": { "S": "1" }, "canvas": { "S": "This is Canvas1" } }, { "file": { "S": "main.mp4" }, "id": { "S": "0" }, "canvas": { "S": "this is a canvas" } } ] to Standard JSON "videos": [ { "file": "file1.mp4" , "id": "1" , "canvas": "This is Canvas1" , "file": "main.mp4" , "id": "0" , "canvas": "this is a canvas" } ] 

我在Javascript中找到了一个很好的工具,但是为了做到这一点,Java中是否有任何工具?

以下是从Dynamo JSON转换为Standard JSON的完整代码:

 import com.amazonaws.services.dynamodbv2.document.Item; import com.amazonaws.services.dynamodbv2.document.internal.InternalUtils; import com.amazonaws.services.dynamodbv2.model.AttributeValue; import com.amazonaws.services.lambda.runtime.Context; import com.amazonaws.services.lambda.runtime.RequestHandler; import com.amazonaws.services.lambda.runtime.events.DynamodbEvent; import com.amazonaws.services.lambda.runtime.events.DynamodbEvent.DynamodbStreamRecord; import com.google.gson.Gson; import java.util.ArrayList; import java.util.List; import java.util.Map; /** * Main Lambda class to receive event stream, parse it to Survey * and process them. */ public class SurveyEventProcessor implements RequestHandler { private static final String INSERT = "INSERT"; private static final String MODIFY = "MODIFY"; public String handleRequest(DynamodbEvent ddbEvent, Context context) { List listOfItem = new ArrayList<>(); List> listOfMaps = null; for (DynamodbStreamRecord record : ddbEvent.getRecords()) { if (INSERT.equals(record.getEventName()) || MODIFY.equals(record.getEventName())) { listOfMaps = new ArrayList>(); listOfMaps.add(record.getDynamodb().getNewImage()); listOfItem = InternalUtils.toItemList(listOfMaps); } System.out.println(listOfItem); try { // String json = new ObjectMapper().writeValueAsString(listOfItem.get(0)); Gson gson = new Gson(); Item item = listOfItem.get(0); String json = gson.toJson(item.asMap()); System.out.println("JSON is "); System.out.println(json); }catch (Exception e){ e.printStackTrace(); } } return "Successfully processed " + ddbEvent.getRecords().size() + " records."; } } 

您可以在aws sdk中使用ItemUtils类。 以下是使用Kotlin的示例代码:

 import com.amazonaws.services.dynamodbv2.document.ItemUtils import com.amazonaws.services.dynamodbv2.model.AttributeValue fun main(args: Array) { val data = HashMap() data.put("hello",AttributeValue().withS("world")) println(data.toString()) println(ItemUtils.toItem(data).toJSON()) } 

输出:

 {hello={S: world,}} {"hello":"world"} 

以下是一个简单的解决方案,可用于将任何DynamoDB Json转换为Simple JSON。

 //passing the reponse.getItems() public static Object getJson(List> mapList) { List finalJson= new ArrayList(); for(Map eachEntry : mapList) { finalJson.add(mapToJson(eachEntry)); } return finalJson; } //if the map is null then it add the key and value(string) in the finalKeyValueMap public static Map mapToJson(Map keyValueMap){ Map finalKeyValueMap = new HashMap(); for(Map.Entry entry : keyValueMap.entrySet()) { if(entry.getValue().getM() == null) { finalKeyValueMap.put(entry.getKey(),entry.getValue().getS()); } else { finalKeyValueMap.put(entry.getKey(),mapToJson(entry.getValue().getM())); } } return finalKeyValueMap; } 

这将以List>的forms生成您想要的Json。 然后使用Gson,您可以将其转换为Json格式。

 Gson gson = new Gson(); String jsonString = gson.toJson(getJson(response.getItems())); 

其实我找到了一个很好的例子:

https://github.com/awslabs/aws-dynamodb-mars-json-demo