Azure Cosmos DB SQL-如何对内部json属性进行转义 [英] Azure Cosmos DB SQL - how to unescape inner json property
问题描述
好吧,我已经花了几个小时试图使它生效.
Okay I have spent hours trying to get this to work.
我在json中有一个内部属性,它是一个json对象.但是,当设备向我发送数据时,Gateway_Info中的json是定界的.这使得无法查询内部对象(使用点符号)
I have an inner property in my json that is a json object. However when a device sends me the data the json in Gateway_Info is delimited. This makes querying that inner object impossible (using dot notation)
有没有一种方法可以从该json字符串中删除\字符以使其成为有效的json?
Is there a way to remove the \ character from that json string to make it valid json?
SELECT * FROM c
{
"Asset_Key": "1",
"Defrost_Cycles": 0,
"Freeze_Cycles": 0,
"Float_Switch_Raw_ADC": 0,
"Bin_status": 0,
"Line_Voltage": 0,
"ADC_Evaporator_Temperature": 0,
"Mem_Sw": 0,
"Freeze_Timer": 0,
"Defrost_Timer": 0,
"Water_Flow_Switch": 0,
"ADC_Mid_Temperature": 0,
"ADC_Water_Temperature": 0,
"Ambient_Temperature": 1,
"Mid_Temperature": 1,
"Water_Temperature": 1,
"Evaporator_Temperature": 1,
"Gateway_Info": "{\"temp_sensor\":0.00,\"temp_pcb\":82.00,\"gw_uptime\":123912.00,\"gw_fw_version\":\"0.0.0\",\"gw_fw_version_git\":\"1-dirty\",\"gw_sn\":\"30\",\"heap_free\":10648.00,\"gw_sig_csq\":19.00,\"gw_sig_quality\":1,\"wifi_sig_strength\":0.00,\"wifi_resets\":0.00,\"modem_sim_iccid\":\"1\",\"modem_meid\":\"1\",\"modem_model\":\"1\"}",
"ADC_Ambient_Temperature": 0
}
需要在代码中定义cosmos db中的
推荐答案
PreTrigger
,因为您的数据是由设备发送的,因此无法通过PreTrigger
PreTrigger
in cosmos db need to be defined in the code, since your data is sent by the device, so it won't work through PreTrigger
.
因此,正如您在评论中提到的那样,建议您使用Azure Function CosmosTrigger处理每个文档,然后再将其插入cosmos db.
So, as you mentioned in your comment ,I suggest you using Azure Function CosmosTrigger to process per document before it is inserted into cosmos db.
我的样本文档:
我的Azure Function CosmosTrigger代码:
My Azure Function CosmosTrigger code:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Microsoft.Azure.Documents;
using Microsoft.Azure.Documents.Client;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Host;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
namespace ProcessJson
{
public class Class1
{
[FunctionName("DocumentUpdates")]
public static void Run(
[CosmosDBTrigger("db", "item", ConnectionStringSetting = "myCosmosDB")]
IReadOnlyList<Document> documents,
TraceWriter log)
{
String endpointUrl = "***";
String authorizationKey = "***";
String databaseId = "db";
String collectionId = "item";
DocumentClient client = new DocumentClient(new Uri(endpointUrl), authorizationKey); ;
Document doc = documents[0];
string gateway = doc.GetPropertyValue<string>("gateway");
JObject o = JObject.Parse(gateway);
doc.SetPropertyValue("gateway",o);
client.ReplaceDocumentAsync(UriFactory.CreateDocumentUri(databaseId, collectionId, doc.Id), doc);
log.Verbose("document Id " + doc.Id);
}
}
}
插入结果:
这篇关于Azure Cosmos DB SQL-如何对内部json属性进行转义的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!