пожалуйста, отнеситесь к этому как к комбинации ответа и вопроса:)
В настоящее время я пытаюсь заставить мой сервер jsonify данных, которые я получаю из формы, такой же, как вы ...
в моем случае форма в конце создаст объект json с несколькими подобъектами, которые могут иметь подобъекты, которые могут иметь ... также.
глубина зависит от пользователя, поэтому я должен иметь возможностьподдерживать бесконечную рекурсию.
мое "решение" пока что просто кажется неправильным, но оно правильно выполняет свою работу, функция getRequestBody получает объект req.body из expressjs, в основном это объект со следующим отображением:
{
"ridic-ulously-deep-subobject": "value",
"ridic-ulously-deep-subobject2": "value",
"ridic-ulously-deep2-subobject3": "value",
}
используется следующий html:
<form>
<input name="ridic-ulously-long-class-string" value="my value" />
</form>
и функция javascript (которая должна работать в общем случае, передайте ей объект req.body, как указано выше, и он вернет jsonобъект):
function getRequestBody(reqB){
var reqBody = {};
for(var keys in reqB) {
var keyArr = keys.split('-');
switch(keyArr.length){
case 1:
if(!reqBody[keyArr[0]]) reqBody[keyArr[0]] = {};
reqBody[keyArr[0]] = reqB[keys];
break;
case 2:
if(!reqBody[keyArr[0]]) reqBody[keyArr[0]] = {};
if(!reqBody[keyArr[0]][keyArr[1]]) reqBody[keyArr[0]][keyArr[1]] = {};
reqBody[keyArr[0]][keyArr[1]] = reqB[keys];
break;
case 3:
if(!reqBody[keyArr[0]]) reqBody[keyArr[0]] = {};
if(!reqBody[keyArr[0]][keyArr[1]]) reqBody[keyArr[0]][keyArr[1]] = {};
if(!reqBody[keyArr[0]][keyArr[1]][keyArr[2]]) reqBody[keyArr[0]][keyArr[1]][keyArr[2]] = {};
reqBody[keyArr[0]][keyArr[1]][keyArr[2]] = reqB[keys];
break;
case 4:
// ...
//and so on, always one line longer
}
return reqBody;
}
это просто кажется неправильным, и сейчас оно охватывает только 5 уровней подобъектов, может случиться так, что у приложения будет достаточно функциональности, чтобы достичь семиХотя даже десять уровней.
это должно быть обычной проблемой, но мои поисковые усилия ничего не дали в течение 10 минут, что обычно означает, что я пропускаю некоторые ключевые слова или что нетжизнеспособное решение [пока] (которое я не могу действительно вообразить в этом случае).
есть ли кто-то, у кого достаточно воображения и логики, чтобы его можно было разгадать, или мне просто нужно расширить эту функцию еще большим количеством беспорядка, чтобы я опустился до 10 возможных подуровней?
iдумаю, что в конечном итоге это не будет иметь большого значения для производительности, но мне бы очень хотелось НЕ создавать этого ужасного бегемота: D
получай удовольствие
jascha