我正在使用azure函数cosmos DB触发器V1尝试基于某些值解析文档以采取一些措施,但是由于某种原因,我在如何从文档中读取属性方面感到很挣扎。我正在阅读此页面以尝试理解它,但无法使其正常工作。
Documentation for trigger function
我创建了这个示例类,它被命中并很好地接收了更改提要,但是我没有进入if子句,因为我没有正确读取该属性,而且我真的没有看到如何使用此方法更深入地了解JSON。
public static class Function1
{
[FunctionName("Function1")]
public static void Run([CosmosDBTrigger(
databaseName: "XXX",
collectionName: "XXX",
ConnectionStringSetting = "CosmosDb",
LeaseCollectionName = "leases", LeaseCollectionPrefix = "local")]IReadOnlyList<Document> documents, TraceWriter log)
{
if (documents != null && documents.Count > 0)
{
log.Info("Documents modified " + documents.Count);
log.Info("First document Id " + documents[0].Id);
foreach(var document in documents)
{
if(document.GetPropertyValue<string>("sourceSystem") == "YYYY")
{
log.Info("sourceSystem = YYYY");
}
}
}
}
}
当文档嵌套在JSON数组深处时,如何从文档中读取数据?我对getPropertyValue有点困惑,因为反对使用linq或类似的语法来解析JSON,如何从文档中获取我的值?
答案 0 :(得分:0)
JSON文件被解析为文档对象,该文档对象提供方法GetPropertyValue<T>(string propertyName)
。我们可以使用此方法搜索JSON文件的第一级。为了更深入,我们需要适当地解析JSON属性。
例如,要读取此文件。
{
"id": "test1",
"myJarray": [
{
"mydata1": "testout",
"mydata2": "testout"
}
]
}
使用JArray进入内部。
foreach (var document in documents)
{
var array = document.GetPropertyValue<JArray>("myJarray");
if (array != null)
{
var data = ((JObject)array[0]).GetValue("mydata1");
if (data != null)
{
log.Info(data.ToString());
}
}
}