[英]Azure Cosmos DB SQL - how to unescape inner json property
Okay I have spent hours trying to get this to work. 好吧,我已经花了数小时试图使它生效。
I have an inner property in my json that is a json object. 我在json中有一个内部属性,它是一个json对象。 However when a device sends me the data the json in Gateway_Info is delimited.
但是,当设备向我发送数据时,Gateway_Info中的json是定界的。 This makes querying that inner object impossible (using dot notation)
这使得查询该内部对象成为不可能(使用点表示法)
Is there a way to remove the \\ character from that json string to make it valid json? 有没有办法从该json字符串中删除\\字符以使其有效为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
}
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
. 由于您的数据是由设备发送的,因此需要在代码中定义cosmos db中的
PreTrigger
,因此它无法通过PreTrigger
。
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. 因此,正如您在评论中提到的那样,建议您在将每个文档插入cosmos db中之前使用Azure Function CosmosTrigger对其进行处理。
My sample document: 我的样本文件:
My Azure Function CosmosTrigger code: 我的Azure Function CosmosTrigger代码:
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);
}
}
}
Insert Result: 插入结果:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.