You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Application Insights日志中存储大量JSON数组及批量JSON数据

在Application Insights日志中存储JSON数组的解决方案

1. 如何以数组格式存储长JSON字符串到AI日志?

其实Application Insights对结构化数据的支持很友好,不用非得把数组当成纯字符串来存。这里有两种靠谱的实现方式:

  • 直接传入结构化数组对象(SDK支持场景):
    如果你的开发语言SDK允许(比如.NET、Java),可以先把长JSON字符串反序列化成数组对象(比如C#里的List<T>或JArray),然后在调用TrackEvent或TrackTrace时,把这个数组作为自定义维度的属性值传入。AI会自动帮你序列化并存储成结构化的数组格式,后续在日志查询时可以直接按数组操作。

  • 序列化后存储为JSON字符串,查询时解析:
    如果SDK不支持直接传入复杂对象,就把JSON数组序列化为标准的JSON字符串,存入自定义维度的某个字段里。之后在AI的日志查询中,用parse_json()函数就能把这个字符串解析成可操作的数组。比如查询语句可以写:

    traces
    | extend rightsArray = parse_json(customDimensions['rightsList'])
    | where array_length(rightsArray) > 2
    

2. 存储1000条重复JSON数据的解决方案

你遇到的问题大概率是单条遥测项的大小限制(Azure规定单个AI遥测项最大为64KB),1000条数据拼在一起肯定远超这个限制,拆分字符串没成功可能是拆分方式不对或者还是超了。试试下面的方法:

方法一:批量发送单个数据条目(推荐)

把每条JSON数据作为一个独立的遥测事件发送,这样既不会超大小限制,还能方便后续的查询和聚合。以C#为例:

首先定义你的数据模型:

public class UserInfo
{
    public string name { get; set; }
    public int age { get; set; }
    public List<string> rights { get; set; }
}

生成1000条数据并批量发送:

var telemetryClient = new TelemetryClient();
var userList = new List<UserInfo>();

// 生成1000条数据
for (int i = 0; i < 1000; i++)
{
    userList.Add(new UserInfo
    {
        name = "Admin",
        age = 36,
        rights = new List<string> { "admin", "editor", "contributor" }
    });
}

// 批量创建遥测事件并发送
var telemetries = userList.Select(user => 
{
    var eventTelemetry = new EventTelemetry("UserRecord");
    eventTelemetry.Properties["name"] = user.name;
    eventTelemetry.Properties["age"] = user.age.ToString();
    // 把rights数组序列化为JSON字符串存储
    eventTelemetry.Properties["rights"] = System.Text.Json.JsonSerializer.Serialize(user.rights);
    return eventTelemetry;
}).ToList();

// 批量发送,效率更高
telemetryClient.TrackBatch(telemetries);

其他语言(比如Python、JavaScript)的SDK也都支持批量发送,思路完全一致:每条数据对应一个遥测事件,打包后批量提交。

方法二:分组存储数组(适合需要关联数据的场景)

如果必须把多条数据放在同一个事件里,就按大小分组(比如每50-100条一组),每组序列化为JSON数组字符串后存入自定义维度,然后发送多个事件。注意每组序列化后的大小要控制在64KB以内(可以提前测试每组的条数)。

比如C#里分组的逻辑:

// 按每100条分组
var groupedUsers = userList.Select((user, index) => new { user, index })
                          .GroupBy(x => x.index / 100)
                          .Select(g => g.Select(x => x.user).ToList());

foreach (var group in groupedUsers)
{
    var eventTelemetry = new EventTelemetry("UserBatch");
    // 把分组后的数组序列化为JSON字符串
    eventTelemetry.Properties["userBatch"] = System.Text.Json.JsonSerializer.Serialize(group);
    telemetryClient.TrackEvent(eventTelemetry);
}

这样每个事件只存100条数据,不会超大小限制,后续查询时同样用parse_json()解析userBatch字段就能得到数组。


内容的提问来源于stack exchange,提问作者teja raju

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:05:54