DynamoDB .NET 如何获取项目 JSON 并直接 return 到客户端
DynamoDB .NET how to get the items JSON and directly return to client side
我的代码是这样的,只是用了一次DynamoDB的扫描,把结果改成JSON
var client = new AmazonDynamoDBClient();
var request = new ScanRequest
{
TableName = "wow_chat_msg",
};
var response = client.Scan(request);
var jsonSerialiser = new JavaScriptSerializer();
var json = jsonSerialiser.Serialize(response.Items);
但是之后返回的JSON是这样的:
[{\"Name\":{\"B\":null,\"BOOL\":false,\"IsBOOLSet\":false,\"BS\":[],\"L\":[],\"IsLSet\":false,\"M\":{},\"IsMSet\":false,\"N\":null,\"NS\":[],\"NULL\":false,\"S\":\"ABC\",\"SS\":[]},\"Type\":{\"B\":null,\"BOOL\":false,\"IsBOOLSet\":false,\"BS\":[],\"L\":[],\"IsLSet\":false,\"M\":{},\"IsMSet\":false,\"N\":null,\"NS\":[],\"NULL\":false,\"S\":\"CDE\",\"SS\":[]},\"msg_uid\":{\"B\":null,\"BOOL\":false,\"IsBOOLSet\":false,\"BS\":[],\"L\":[],\"IsLSet\":false,\"M\":{},\"IsMSet\":false,\"N\":\"1010\",\"NS\":[],\"NULL\":false,\"S\":null,\"SS\":[]},\"group_uid\":{\"B\":null,\"BOOL\":false,\"IsBOOLSet\":false,\"BS\":[],\"L\":[],\"IsLSet\":false,\"M\":{},\"IsMSet\":false,\"N\":\"1\",\"NS\":[],\"NULL\":false,\"S\":null,\"SS\":[]}},{\"Name\":{\"B\":null,\"BOOL\":false,\"IsBOOLSet\":false,\"BS\":[],\"L\":[],\"IsLSet\":false,\"M\":{},\"IsMSet\":false,\"N\":null,\"NS\":[],\"NULL\":false,\"S\":\"ABC\",\"SS\":[]},\"Type\":{\"B\":null,\"BOOL\":false,\"IsBOOLSet\":false,\"BS\":[],\"L\":[],\"IsLSet\":false,\"M\":{},\"IsMSet\":false,\"N\":null,\"NS\":[],\"NULL\":false,\"S\":\"CDE\",\"SS\":[]},\"msg_uid\":{\"B\":null,\"BOOL\":false,\"IsBOOLSet\":false,\"BS\":[],\"L\":[],\"IsLSet\":false,\"M\":{},\"IsMSet\":false,\"N\":\"3\",\"NS\":[],\"NULL\":false,\"S\":null,\"SS\":[]}},{\"Name\":{\"B\":null,\"BOOL\":false,\"IsBOOLSet\":false,\"BS\":[],\"L\":[],\"IsLSet\":false,\"M\":{},\"IsMSet\":false,\"N\":null,\"NS\":[],\"NULL\":false,\"S\":\"Chong\",\"SS\":[]},\"Type\":{\"B\":null,\"BOOL\":false,\"IsBOOLSet\":false,\"BS\":[],\"L\":[],\"IsLSet\":false,\"M\":{},\"IsMSet\":false,\"N\":null,\"NS\":[],\"NULL\":false,\"S\":\"Peter\",\"SS\":[]},\"msg_uid\":{\"B\":null,\"BOOL\":false,\"IsBOOLSet\":false,\"BS\":[],\"L\":[],\"IsLSet\":false,\"M\":{},\"IsMSet\":false,\"N\":\"2\",\"NS\":[],\"NULL\":false,\"S\":null,\"SS\":[]}},{\"Name\":{\"B\":null,\"BOOL\":false,\"IsBOOLSet\":false,\"BS\":[],\"L\":[],\"IsLSet\":false,\"M\":{},\"IsMSet\":false,\"N\":null,\"NS\":[],\"NULL\":false,\"S\":\"ABC\",\"SS\":[]},\"Type\":{\"B\":null,\"BOOL\":false,\"IsBOOLSet\":false,\"BS\":[],\"L\":[],\"IsLSet\":false,\"M\":{},\"IsMSet\":false,\"N\":null,\"NS\":[],\"NULL\":false,\"S\":\"CDE\",\"SS\":[]},\"msg_uid\":{\"B\":null,\"BOOL\":false,\"IsBOOLSet\":false,\"BS\":[],\"L\":[],\"IsLSet\":false,\"M\":{},\"IsMSet\":false,\"N\":\"1011\",\"NS\":[],\"NULL\":false,\"S\":null,\"SS\":[]}},{\"Name\":{\"B\":null,\"BOOL\":false,\"IsBOOLSet\":false,\"BS\":[],\"L\":[],\"IsLSet\":false,\"M\":{},\"IsMSet\":false,\"N\":null,\"NS\":[],\"NULL\":false,\"S\":\"Chan\",\"SS\":[]},\"Type\":{\"B\":null,\"BOOL\":false,\"IsBOOLSet\":false,\"BS\":[],\"L\":[],\"IsLSet\":false,\"M\":{},\"IsMSet\":false,\"N\":null,\"NS\":[],\"NULL\":false,\"S\":\"Rico\",\"SS\":[]},\"msg_uid\":{\"B\":null,\"BOOL\":false,\"IsBOOLSet\":false,\"BS\":[],\"L\":[],\"IsLSet\":false,\"M\":{},\"IsMSet\":false,\"N\":\"1\",\"NS\":[],\"NULL\":false,\"S\":null,\"SS\":[]}}]
转义字符是因为我把它改成了字符串。但我想问一下如何去掉不需要的属性?就像我只想要 json 值中的“2”,但是还有太多其他属性,例如 "S"、"SS"、"BOOL" .... 等我只想要一个漂亮的 JSON.
求助,我查了很多资料,想寻求解决办法。
刚找到答案。
使用 DynamoDB 的低级别 api 将 return 大量不必要的数据用于低级别使用。所以我们可以使用高级文档模型。
http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/ScanMidLevelDotNet.html
使用Table.scan,然后用自己的方法组合document.ToJSON()的Object,这里我用ArrayList全部组合起来
然后在我得到一个Object列表之后,然后return到客户端。一切都很美好。
我有一个解决方案 returns 很好 JSON。这是一个 Lambda 函数:
public List<dynamic> GetDynamoData(string dynamoTableName, ILambdaContext context) {
Amazon.DynamoDBv2.AmazonDynamoDBConfig amazonDynamoDBConfig = new Amazon.DynamoDBv2.AmazonDynamoDBConfig { RegionEndpoint = RegionEndpoint.XWZ};
Amazon.DynamoDBv2.AmazonDynamoDBClient client = new Amazon.DynamoDBv2.AmazonDynamoDBClient(amazonDynamoDBConfig);
Table myTable = Table.LoadTable(client,dynamoTableName);
ScanFilter scanFilter = new ScanFilter();
scanFilter.AddCondition("IDCOLULM", ScanOperator.GreaterThan, 123465); //Whatever your filter is
Search search = myTable.Scan(scanFilter);
List<dynamic> results = new List<dynamic>();
do
{
var docList = search.GetNextSetAsync();
docList.Result.ForEach(doc=> {
dynamic x = Newtonsoft.Json.JsonConvert.DeserializeObject(doc.ToJson());
results.Add(x);
});
} while (!search.IsDone);
return results;
}
我的代码是这样的,只是用了一次DynamoDB的扫描,把结果改成JSON
var client = new AmazonDynamoDBClient();
var request = new ScanRequest
{
TableName = "wow_chat_msg",
};
var response = client.Scan(request);
var jsonSerialiser = new JavaScriptSerializer();
var json = jsonSerialiser.Serialize(response.Items);
但是之后返回的JSON是这样的:
[{\"Name\":{\"B\":null,\"BOOL\":false,\"IsBOOLSet\":false,\"BS\":[],\"L\":[],\"IsLSet\":false,\"M\":{},\"IsMSet\":false,\"N\":null,\"NS\":[],\"NULL\":false,\"S\":\"ABC\",\"SS\":[]},\"Type\":{\"B\":null,\"BOOL\":false,\"IsBOOLSet\":false,\"BS\":[],\"L\":[],\"IsLSet\":false,\"M\":{},\"IsMSet\":false,\"N\":null,\"NS\":[],\"NULL\":false,\"S\":\"CDE\",\"SS\":[]},\"msg_uid\":{\"B\":null,\"BOOL\":false,\"IsBOOLSet\":false,\"BS\":[],\"L\":[],\"IsLSet\":false,\"M\":{},\"IsMSet\":false,\"N\":\"1010\",\"NS\":[],\"NULL\":false,\"S\":null,\"SS\":[]},\"group_uid\":{\"B\":null,\"BOOL\":false,\"IsBOOLSet\":false,\"BS\":[],\"L\":[],\"IsLSet\":false,\"M\":{},\"IsMSet\":false,\"N\":\"1\",\"NS\":[],\"NULL\":false,\"S\":null,\"SS\":[]}},{\"Name\":{\"B\":null,\"BOOL\":false,\"IsBOOLSet\":false,\"BS\":[],\"L\":[],\"IsLSet\":false,\"M\":{},\"IsMSet\":false,\"N\":null,\"NS\":[],\"NULL\":false,\"S\":\"ABC\",\"SS\":[]},\"Type\":{\"B\":null,\"BOOL\":false,\"IsBOOLSet\":false,\"BS\":[],\"L\":[],\"IsLSet\":false,\"M\":{},\"IsMSet\":false,\"N\":null,\"NS\":[],\"NULL\":false,\"S\":\"CDE\",\"SS\":[]},\"msg_uid\":{\"B\":null,\"BOOL\":false,\"IsBOOLSet\":false,\"BS\":[],\"L\":[],\"IsLSet\":false,\"M\":{},\"IsMSet\":false,\"N\":\"3\",\"NS\":[],\"NULL\":false,\"S\":null,\"SS\":[]}},{\"Name\":{\"B\":null,\"BOOL\":false,\"IsBOOLSet\":false,\"BS\":[],\"L\":[],\"IsLSet\":false,\"M\":{},\"IsMSet\":false,\"N\":null,\"NS\":[],\"NULL\":false,\"S\":\"Chong\",\"SS\":[]},\"Type\":{\"B\":null,\"BOOL\":false,\"IsBOOLSet\":false,\"BS\":[],\"L\":[],\"IsLSet\":false,\"M\":{},\"IsMSet\":false,\"N\":null,\"NS\":[],\"NULL\":false,\"S\":\"Peter\",\"SS\":[]},\"msg_uid\":{\"B\":null,\"BOOL\":false,\"IsBOOLSet\":false,\"BS\":[],\"L\":[],\"IsLSet\":false,\"M\":{},\"IsMSet\":false,\"N\":\"2\",\"NS\":[],\"NULL\":false,\"S\":null,\"SS\":[]}},{\"Name\":{\"B\":null,\"BOOL\":false,\"IsBOOLSet\":false,\"BS\":[],\"L\":[],\"IsLSet\":false,\"M\":{},\"IsMSet\":false,\"N\":null,\"NS\":[],\"NULL\":false,\"S\":\"ABC\",\"SS\":[]},\"Type\":{\"B\":null,\"BOOL\":false,\"IsBOOLSet\":false,\"BS\":[],\"L\":[],\"IsLSet\":false,\"M\":{},\"IsMSet\":false,\"N\":null,\"NS\":[],\"NULL\":false,\"S\":\"CDE\",\"SS\":[]},\"msg_uid\":{\"B\":null,\"BOOL\":false,\"IsBOOLSet\":false,\"BS\":[],\"L\":[],\"IsLSet\":false,\"M\":{},\"IsMSet\":false,\"N\":\"1011\",\"NS\":[],\"NULL\":false,\"S\":null,\"SS\":[]}},{\"Name\":{\"B\":null,\"BOOL\":false,\"IsBOOLSet\":false,\"BS\":[],\"L\":[],\"IsLSet\":false,\"M\":{},\"IsMSet\":false,\"N\":null,\"NS\":[],\"NULL\":false,\"S\":\"Chan\",\"SS\":[]},\"Type\":{\"B\":null,\"BOOL\":false,\"IsBOOLSet\":false,\"BS\":[],\"L\":[],\"IsLSet\":false,\"M\":{},\"IsMSet\":false,\"N\":null,\"NS\":[],\"NULL\":false,\"S\":\"Rico\",\"SS\":[]},\"msg_uid\":{\"B\":null,\"BOOL\":false,\"IsBOOLSet\":false,\"BS\":[],\"L\":[],\"IsLSet\":false,\"M\":{},\"IsMSet\":false,\"N\":\"1\",\"NS\":[],\"NULL\":false,\"S\":null,\"SS\":[]}}]
转义字符是因为我把它改成了字符串。但我想问一下如何去掉不需要的属性?就像我只想要 json 值中的“2”,但是还有太多其他属性,例如 "S"、"SS"、"BOOL" .... 等我只想要一个漂亮的 JSON.
求助,我查了很多资料,想寻求解决办法。
刚找到答案。
使用 DynamoDB 的低级别 api 将 return 大量不必要的数据用于低级别使用。所以我们可以使用高级文档模型。
http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/ScanMidLevelDotNet.html
使用Table.scan,然后用自己的方法组合document.ToJSON()的Object,这里我用ArrayList全部组合起来
然后在我得到一个Object列表之后,然后return到客户端。一切都很美好。
我有一个解决方案 returns 很好 JSON。这是一个 Lambda 函数:
public List<dynamic> GetDynamoData(string dynamoTableName, ILambdaContext context) {
Amazon.DynamoDBv2.AmazonDynamoDBConfig amazonDynamoDBConfig = new Amazon.DynamoDBv2.AmazonDynamoDBConfig { RegionEndpoint = RegionEndpoint.XWZ};
Amazon.DynamoDBv2.AmazonDynamoDBClient client = new Amazon.DynamoDBv2.AmazonDynamoDBClient(amazonDynamoDBConfig);
Table myTable = Table.LoadTable(client,dynamoTableName);
ScanFilter scanFilter = new ScanFilter();
scanFilter.AddCondition("IDCOLULM", ScanOperator.GreaterThan, 123465); //Whatever your filter is
Search search = myTable.Scan(scanFilter);
List<dynamic> results = new List<dynamic>();
do
{
var docList = search.GetNextSetAsync();
docList.Result.ForEach(doc=> {
dynamic x = Newtonsoft.Json.JsonConvert.DeserializeObject(doc.ToJson());
results.Add(x);
});
} while (!search.IsDone);
return results;
}