Я создаю веб-API и работаю с учетной записью в соответствии с точными требованиями, установленными внешней компанией, которая будет извлекать данные из API через запрос GET. Одним из требований является наличие квадратных скобок, заключающих массивы в возвращаемом значении, которое необходимо удалить. Ниже приведен пример того, что у меня есть на данный момент — факультеты религий, языков и истории заключены в квадратные скобки;
{
"roles": [
[
"STUDENT",
"Undergraduate",
3,
[
"History",
"Languages",
"Religions"
],
"GIBSON, David Test",
666778
]
]
}
Они требуют, чтобы возврат выглядел так;
{
"roles": [
[
"STUDENT",
"Undergraduate",
3,
"History",
"Languages",
"Religions",
"GIBSON, David Test",
666778
]
]
}
Не уверен, что это поможет, но три вышеупомянутых факультета представляют собой массив с именем deptarray, т. е. если студент принадлежит более чем к одному факультету, перечислите эти факультеты в возврате в виде массива;
var deptarray = jArr.Distinct();
if (deptarray.Count() > 1) studentList[0][i] = new JArray(deptarray);
Я был бы признателен за любую помощь в удалении квадратных скобок и просто за то, что отделы заключены в двойные кавычки.
Вам не нужно убирать скобки, вам просто нужно создать массив, содержащий "Student","Undergrad", etc. по-другому. Вы уверены, что у вас это правильно? Если вы делаете то, что предлагаете, и предполагаете, что количество отделов является переменным, как можно будет определить разницу между отделом и названием, которое следует за списком отделов?
@stuartd спасибо за ответ - да, верно, я использую Json.NET.
@TangentiallyPerpendicular спасибо, что нашли время, чтобы проверить вопрос. Внешней компании не нужно будет указывать разницу между списком факультетов и данными других студентов. Каждый бит студенческих данных, которые они будут читать, называется «роль», поэтому, когда они отправляют запрос GET для любого конкретного учащегося, они хотят, чтобы их данные были перечислены в указанном выше формате и в каждой строке (например, отдел, год, номер студента и т. д.) называется «роль». Таким образом, для приведенного выше примера студента у них будет 8 ролей, т. е. роль, созданная для каждой строки в отчете.
Я вижу, ты никогда не останавливаешься. Это ваш код, который вы должны добавить в свой ADO.net.
var roles = JArray.From(studentRoles);
if (roles.Count() > 1)
{
var newArr = new JArray();
for (int j = 0; j < roles[0].Count(); j++)
{
var jArr = new JArray();
for (var i = 1; i < roles.Count(); i++)
{
if (i == 1) jArr = new JArray { roles[0][j] };
jArr.Add(roles[i][j]);
}
var arr = jArr.Distinct();
if (arr.Count() > 1)
foreach (var item in arr)
{
newArr.Add(item);
}
else newArr.Add(arr.First());
}
}
roles=newArr;
}
var response = Request.CreateResponse(HttpStatusCode.OK, new { roles = roles
});
Ха! Рад снова видеть тебя, мой друг :). Я обещаю, что скоро остановлюсь, ха-ха. Еще раз спасибо за вашу помощь. Позвольте мне взглянуть на это и вернуться к вам.
Я должен тебе выпить или четыре? Сделано ТОЧНО то, что мне было нужно. Спасибо большое Серж! Ты был моим героем на этой неделе, ха-ха! :)
@GBM Добро пожаловать!. Пожалуйста, будьте честны сейчас и скажите, есть ли что-то, что вам еще нужно изменить.
РЖУ НЕ МОГУ! Я обещаю, что больше ничего нет :) ну, по крайней мере, не касающегося формата данных, ха! Ты был джентльменом, и я ценю тебя! Еще раз спасибо за вашу помощь!
Я предполагаю из JArray, что вы используете Json.NET?