【发布时间】:2021-03-17 15:48:16
【问题描述】:
我是 C#、REST API 和 JSON 的新手,所以请多多包涵。我已经搜索了数百页,并试图弄清楚这一切是如何运作的。对于上下文,我使用http://mylink.com/rest/api/2/search?jql=project%3DBULK 之类的搜索从 JIRA REST API 中提取问题并获取问题列表。我的程序引入的 JSON 结构如下(这已从实际 JSON 中简化):
编辑(2021 年 4 月 4 日):使用新用例更新了下面的 JSON。
[
{
"key": "FAKE-5402",
"fields": {
"summary": "I need access to blah",
"customfield_18302": [{
"self": "fake.url.com",
"value": "I need this"
}, {
"self": "fake.url2.com",
"value": "I need this also"
}]
}
},
{
"key": "FAKE-5450",
"fields": {
"summary": "Example number 2",
"customfield_18302": [{
"self": "fake.url3.com",
"value": "I need this"
}, {
"self": "fake.url4.com",
"value": "I need this also"
}]
}
}
]
我目前正在研究一种获取此 JSON 数据的方法,找到用户正在搜索的键并将其以 CSV 格式打印出来,以便稍后写入文件。这是我的formatAsCSV() 函数:
public void formatAsCSV()
{
try
{
var dynObj = JsonConvert.DeserializeObject<dynamic>(this.jsonData);
String issues = dynObj["issues"].ToString();
JArray issuesArray = JArray.Parse(issues);
List<String> columnNames = new List<String>()
{"key", "summary"};
String headerRow = "";
foreach (String columnName in columnNames)
{
headerRow += columnName + ", ";
}
headerRow = headerRow.TrimEnd(' ');
headerRow = headerRow.TrimEnd(',');
headerRow += "\n";
String dataRows = "";
foreach (var record in issuesArray)
{
String thisRecord = "";
foreach (String columnName in columnNames)
{
thisRecord += record[columnNames] + ", ";
}
thisRecord = thisRecord.TrimEnd(' ');
thisRecord = thisRecord.TrimEnd(',');
thisRecord += "\n";
dataRows += thisRecord;
}
this.csvData = headerRow + dataRows;
Console.WriteLine("\ncsvData: ");
Console.WriteLine(this.csvData);
}
catch (Exception ex)
{
Console.WriteLine("Error in formatAsCSV: " + ex);
this.errorsOccurred = true;
}
}
我在上面的代码中遇到的问题(我已经尝试了几天来解决这个问题......)是它将所有问题作为单独的对象引入。因此,当代码循环通过时,我可以获得“key”、“expand”、“id”、“self”,因为它们没有嵌套。当我需要诸如“摘要”和“问题类型”->“名称”之类的内容时,相同的代码不会抓取嵌套在“字段”下的内容。我不知道从哪里开始获取这些信息。
这是我从类似这样的东西中得到的输出(请注意在第一个逗号之后缺少摘要):
csvData:
key, summary
BULK-62,
BULK-47,
如果有人有任何想法,请告诉我,因为我已经没有东西可以尝试了。这里的大多数问题都以 JObject 开头,但我不断收到错误,“问题”是我拉的主要内容,它是一个数组,而不是一个对象,所以不知道如何处理这个问题。我知道它可以以某种方式工作,因为 JIRA 允许 CSV 通过手动过程提取。我希望有一种方法可以保持我拥有的过程(它来自遵循 YT 教程),所以我不必重写我已经完成的所有内容,但我理解是否归结为这一点。提前致谢!
【问题讨论】:
-
@dbc 感谢您告诉我,我继续进行了一些更改。我的工作不允许粘贴到这个站点,所以我超级简化了 JSON,仍然足以解决问题。布赖恩,我还没有看到那个,所以我会试一试,看看我能不能让它同时工作。谢谢你们!
标签: c# json json.net export-to-csv jira-rest-api