【发布时间】:2019-08-02 08:17:07
【问题描述】:
我正在尝试翻译 JSON 文档的内容。 这意味着我必须翻译一些属性的值,而不是全部。
隔离问题,我正在尝试获取具有特定名称(例如 title )的所有属性,这些属性可以位于不同的 json 级别,然后获取这些属性的值,使用翻译服务翻译值,然后用翻译后的值替换每个值。
如何使用 C# 实现这一点?我正在尝试使用 Newtonsoft.Json 库,JToken、JProperty 的使用对我来说有点令人困惑..
这是json文件的例子:
[
{
"_id": "a-10",
"_parentId": "co-10",
"_type": "article",
"_classes": "",
"title": "THINK INTEGRITY AT X",
"displayTitle": "SECTION 01: <em>THINK INTEGRITY AT X </em>",
"body": "<p>ASKING THE RIGHT QUESTIONS.</p>"
},
{
"_id": "a-20",
"_parentId": "co-20",
"_type": "article",
"_classes": "",
"title": "INTEGRITY OF SERVICES",
"displayTitle": "SECTION 02: <em>INTEGRITY OF SERVICES</em>",
"body": "<p>STAYING INDEPENDENT IN ALL CIRCUMSTANCES.</p>"
},
{
"_id": "a-30",
"_parentId": "co-30",
"_type": "article",
"_classes": "",
"title": "BRIBERY AND CORRUPTION",
"displayTitle": "SECTION 03: <em>BRIBERY AND CORRUPTION</em>",
"body": "<p>KNOWING WHAT YOU SHOULD AND SHOULDN'T ACCEPT.</p>"
},
{
"_id": "a-40",
"_parentId": "co-40",
"_type": "article",
"_classes": "",
"title": "CONFLICTS OF INTEREST",
"displayTitle": "SECTION 04: <em>CONFLICTS OF INTEREST</em>",
"body": "<p>RECOGNISING CONFLICTS AND KNOWING WHAT TO DO.</p>"
},
{
"_id": "a-50",
"_parentId": "co-50",
"_type": "article",
"_classes": "",
"title": "OPERATIONAL INTEGRITY",
"displayTitle": "SECTION 05: <em>OPERATIONAL INTEGRITY</em>",
"body": "<p>LEARN IT. OWN IT. BE IT.</p>"
},
{
"_id": "a-60",
"_parentId": "co-60",
"_type": "article",
"_classes": "",
"title": "TEST YOURSELF",
"displayTitle": "SECTION 06: <em>TEST YOURSELF</em>",
"body": "<p>PUTTING YOUR INTEGRITY TO THE TEST.</p>"
}
]
所以要翻译所有json中“title”属性的内容,可以是这样的:
string jsonText = File.ReadAllText(jsonfilename);
JArray jsonDocument = JArray.Parse(jsonText);
IEnumerable<JToken> titles = jsonDocument.SelectTokens("..title");
foreach (var title in titles)
{
string translatedText = TranslationService.TranslateString(title.ToString(), fromlanguage, tolanguage, "text/plain");
title.Replace(JToken.FromObject(new { title = translatedText }));
}
但这不起作用,我想我已经接近它了,但我看不到用翻译后的属性值替换属性值的方法。
记住标题可以在JSON文件中的任何级别,所以使用jsonDocument["title"]方式访问是不可行的,我想用翻译后的值替换现有值。
我会很感激任何线索 谢谢
【问题讨论】: