Azure认知服务是否支持JSON值翻译?.NET Core实现咨询
用Azure认知服务翻译JSON值的.NET Core实现方法
Azure翻译器本身没有直接的JSON结构翻译接口,核心思路是解析JSON提取待翻译文本→批量翻译→重构JSON,以下是具体实现步骤:
1. 前置准备
- 在Azure门户创建「翻译器」资源,获取密钥和区域端点
- 在.NET Core项目中安装NuGet包:
Microsoft.Azure.CognitiveServices.Translator.Text
2. 核心实现逻辑
步骤1:定义待翻译的JSON结构与目标字段
假设你有如下JSON需要翻译,仅需要翻译name、description、summary字段:
{ "id": 1, "name": "Azure Cognitive Services", "description": "Cloud-based AI services for developers", "metadata": { "tags": ["AI", "Cloud"], "summary": "Build intelligent apps faster" } }
步骤2:解析JSON并提取待翻译文本
用System.Text.Json递归遍历JSON节点,提取目标字段的文本值(支持处理嵌套结构):
using System.Text.Json; using System.Text.Json.Nodes; // 提取待翻译文本及对应的JSON节点 private static List<(string Text, JsonNode Node)> ExtractTranslatableTexts(JsonNode node, List<string> targetFields) { var texts = new List<(string, JsonNode)>(); if (node is JsonObject obj) { foreach (var property in obj) { if (targetFields.Contains(property.Key) && property.Value is JsonValue value && value.TryGetValue(out string text)) { texts.Add((text, property.Value)); } else { texts.AddRange(ExtractTranslatableTexts(property.Value, targetFields)); } } } return texts; }
步骤3:调用Azure翻译API批量翻译
初始化翻译客户端,批量提交文本进行翻译,减少API请求次数:
using Microsoft.Azure.CognitiveServices.Translator.Text; using Microsoft.Azure.CognitiveServices.Translator.Text.Models; private static async Task<List<string>> TranslateTexts(List<string> texts, string fromLang, string toLang, string key, string region) { var credentials = new ApiKeyServiceClientCredentials(key); var client = new TranslatorTextClient(credentials) { Endpoint = $"https://{region}.cognitiveservices.azure.com/" }; var translationResult = await client.TranslateAsync( to: new List<string> { toLang }, text: texts, from: fromLang ); return translationResult.SelectMany(r => r.Translations).Select(t => t.Text).ToList(); }
步骤4:将翻译结果替换回JSON
把翻译后的文本替换到对应的JSON节点,再序列化为最终JSON:
public static async Task<string> TranslateJson(string jsonInput, List<string> targetFields, string fromLang, string toLang, string azureKey, string azureRegion) { var jsonNode = JsonNode.Parse(jsonInput); if (jsonNode == null) return jsonInput; // 提取待翻译文本 var translatableItems = ExtractTranslatableTexts(jsonNode, targetFields); var textsToTranslate = translatableItems.Select(item => item.Text).ToList(); if (!textsToTranslate.Any()) return jsonInput; // 批量翻译 var translatedTexts = await TranslateTexts(textsToTranslate, fromLang, toLang, azureKey, azureRegion); // 替换回JSON节点 for (int i = 0; i < translatableItems.Count; i++) { translatableItems[i].Node.GetValue<JsonValue>().Value = translatedTexts[i]; } // 序列化为最终JSON return jsonNode.ToJsonString(new JsonSerializerOptions { WriteIndented = true }); }
3. 调用示例
var originalJson = @"{""id"":1,""name"":""Azure Cognitive Services"",""description"":""Cloud-based AI services for developers"",""metadata"":{""tags"":[""AI"",""Cloud""],""summary"":""Build intelligent apps faster""}}"; var targetFields = new List<string> { "name", "description", "summary" }; var translatedJson = await TranslateJson(originalJson, targetFields, "en", "zh-Hans", "your-azure-key", "your-region"); Console.WriteLine(translatedJson);
注意事项
- 若JSON结构复杂,可根据实际需求调整
ExtractTranslatableTexts方法的遍历逻辑,比如跳过数组元素、指定特定嵌套路径 - Azure翻译API有请求限制,批量翻译时需注意单次请求的文本数量上限
- 建议添加异常处理,捕获API调用超时、密钥无效等错误
内容的提问来源于stack exchange,提问作者Ali Alizade
相关产品推荐
相关产品推荐

