2017-05-05 4 views
2

Ich muss ein AWS DYNAMODB JSON in ein Standard-JSON-Objekt konvertieren.Konvertieren von DynamoDB JSON in Standard-JSON mit Java

in DynamoDB JSON: so kann ich den Datentyp aus dem DynamoDB JSON Etwas mehr wie entfernen

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

    } 
    ] 

ich ein schönes Werkzeug in Javascript gefunden, aber ist es eine Tool in Java zu tun, um Das?

Antwort

2

Unten ist der vollständige Code für auf Standard JSON von Dynamo JSON konvertieren:

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<DynamodbEvent, String> { 

    private static final String INSERT = "INSERT"; 

    private static final String MODIFY = "MODIFY"; 

    public String handleRequest(DynamodbEvent ddbEvent, Context context) { 

     List<Item> listOfItem = new ArrayList<>(); 
     List<Map<String, AttributeValue>> listOfMaps = null; 
     for (DynamodbStreamRecord record : ddbEvent.getRecords()) { 

      if (INSERT.equals(record.getEventName()) || MODIFY.equals(record.getEventName())) { 
       listOfMaps = new ArrayList<Map<String, AttributeValue>>(); 
       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."; 
    } 
} 
1

Es folgt eine einfache Lösung, die sein kann, angewendet, um einen beliebigen DynamoDB-JSON in einen einfachen JSON zu konvertieren.

//passing the reponse.getItems() 
public static Object getJson(List<Map<String,AttributeValue>> mapList) { 
    List<Object> finalJson= new ArrayList(); 
    for(Map<String,AttributeValue> 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<String,Object> mapToJson(Map<String,AttributeValue> keyValueMap){ 
    Map<String,Object> finalKeyValueMap = new HashMap(); 
    for(Map.Entry<String, AttributeValue> 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; 
} 

Dies wird Ihre gewünschte Json in Form von Liste> produzieren. Mit dem Gson können Sie es dann in das Json-Format konvertieren.

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

Sie können ItemUtils Klasse in AWS SDK verwenden. Im Folgenden finden Sie Beispielcode Kotlin mit:

import com.amazonaws.services.dynamodbv2.document.ItemUtils 
import com.amazonaws.services.dynamodbv2.model.AttributeValue 

fun main(args: Array<String>) { 
    val data = HashMap<String,AttributeValue>() 
    data.put("hello",AttributeValue().withS("world")) 
    println(data.toString()) 
    println(ItemUtils.toItem(data).toJSON()) 
} 

Ausgang:

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