Создать строку JSON из JavaScript для цикла - PullRequest
1 голос
/ 08 августа 2011

Я хочу создать строку JSON из цикла javascript for. Это то, что я пытался сделать (что дает мне нечто похожее на строку JSON), но это не работает.

var edited = "";
for(var i=1;i<POST.length-1;i++) {
    edited += '"'+POST[i].name+'":"'+POST[i].value+'",';
}

Это дает мне это:

"type":"empty","name":"email-address","realname":"Email Address","status":"empty","min":"empty","max":"empty","dependson":"empty",

Это не работает, если я позже пытаюсь преобразовать его в объект JSON.

Ответы [ 4 ]

6 голосов
/ 08 августа 2011

Две проблемы:

  • Требуется объект, поэтому строка JSON должна начинаться с { и заканчиваться }.
  • Есть конечный ,, который может быть признан недействительным.

Возможно, лучше использовать библиотеку, но для исправления вашего кода:

  • Измените var edited = ""; на var edited = "{";, чтобы начать строку JSON с {
  • Добавьте edited = edited.slice(0, -1); после цикла for, чтобы удалить запятую.
  • Добавьте edited += "}"; после предыдущего оператора, чтобы завершить вашу строку JSON }

Ваш окончательный код будет:

var edited = "{";
for(var i=1;i<POST.length-1;i++) {
    edited += '"'+POST[i].name+'":"'+POST[i].value+'",';
}
edited = edited.slice(0, -1);
edited += "}";

Опять же, лучше всего использовать библиотеку (например, JSON.stringify), создав объект с циклом for, добавив свойства, используя POST[i].name в качестве ключа и POST[i].value в качестве значения, затем используя библиотеку для преобразования объект в JSON.

Кроме того, вы начинаете с индекса 1 и заканчиваете индексом POST.length-2, следовательно, исключая индексы 0 (первое значение) и POST.length-1 (последнее значение). Это то, что вы действительно хотите?

4 голосов
/ 08 августа 2011
//dummy data
var post=[{name:'name1',value:1},{name:'name2',value:2}];

var json=[];
for(var i=0;i<post.length;i++)
{
    var temp={};
    temp[post[i].name]=post[i].value;
   json.push(temp);
}

var stringJson = JSON.stringify(json);


alert(stringJson );

http://jsfiddle.net/3mYux/

0 голосов
/ 08 августа 2011

У вас есть лишняя запятая в строке JSON.Формат строки JSON: {"JSON": "Hello, World"}

var edited = "{";
for(var i=1;i<POST.length-1;i++) {
    edited += '"'+POST[i].name+'":"'+POST[i].value+'",';
}
// remove last comma:
edited = edited.substring(0, edited.length-1) + "}";
0 голосов
/ 08 августа 2011

Разве вы не можете просто создать хеш и сделать toString для хеша?Примерно так:

var edited = {};
for(var i=0;i<POST.length-1;i++) {    
    edited[POST[i].name] = POST[i].value;
}

Или, может быть, JSON.stringify - это то, что вы ищете: http://www.json.org/js.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...