JSON. NET - получение определенных свойств внутри объектов от Jarray - PullRequest
0 голосов
/ 13 марта 2020

Существует ряд JSON объектов, называемых «проблемами», каждый из которых имеет одну или несколько «ссылок на проблемы», которые имеют следующий формат:

// an issue link
{
  "id": "000000",
  "self": "some link",
  "type": {
    "id": "0000",
    "name": "some name",
    "inward": "is met by",
    "outward": "meets",
    "self": "some link"
  },
  "outwardIssue": {
    "id": "000000",
    "key": "the required key",
    "self": "some link",
    "fields": {
      // the remainder is not applicable
      }
    }
  }
}

Эти «ссылки на проблемы» были добывается следующим образом. Создайте JArray для JSON для самой «проблемы» и извлеките дочерние объекты JObject:

public void Deserialize(dynamic jsonObject)
{
    // get the issue links
    if (jsonObject["fields"]["issuelinks"]!=null)
    {
        JArray issueLinksArray = jsonObject["fields"]["issuelinks"];
        var issueLinkObjects = issueLinksArray.Children();
        foreach (var issueLink in issueLinkObjects)
        {
             // now need the "key" in the "outwardIssue" for this object, if the value of "inward" is "is met by".
        }
    }
}

Как go о извлечении значения второго свойства "key" из "outwardIssue"

1 Ответ

2 голосов
/ 13 марта 2020

Не уверен, полностью ли я понимаю, но следующий отрывок возвращает вам значение (или ноль, если условие не выполнено) следующим образом.

 var key = issueLink["type"]["inward"].ToString()=="is met by" ? issueLink["outwardIssue"]["key"]: null;

Подсказка: старайтесь избегать динамических c.

В наши дни петли могут в определенных условиях считаться олдскульными. Think LINQ: проблему можно разделить на более мелкие пробники и распределить по нескольким строкам (продумать шаги) Дополнительные переменные могут улучшить читаемость. По мере роста проекта петли становятся все больше и больше. Поэтому, если вам просто нужны запрошенные значения, могут быть интересны следующие:

var inwardLinks = issueLinkObject.Where(i=>i["type"]["inward"].ToString()=="is met by");
var keys = inwardLinks.Select(iwl=>iwl["outwardIssue"]["key"]);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...