Это не JSON, с которым вы играете.Это объекты JavaScript.Предоставленный JSON расшифровывается как «нотация объектов javascript», но обычно он относится к сериализованным объектам, передаваемым по сети.
ОК, поэтому введение в литералы объектов в javascript:
Объект имеет формат {ключ: значение, ключ: значение}, где ключевую часть не нужно заключать в кавычки, если она не является ключевым словом.
Массив имеет формат [значение, значение].
Массивы реализованы в виде объектов.
Чтобы получить доступ к значению в объекте, используйте одно из следующих обозначений:
object.key
object['key']
обратите внимание, что вторая запись означает, что вы можете использовать переменную в качестве ключа.
Поскольку массивы являются просто объектами, вы обращаетесь к значениям в массивах одинаково:
array[index]
Итак, чтобы сделать то, что, как я думаю, вы пытаетесь сделать, я бы сделал это так:
Во-первых, простая функция, чтобы превратить объекты встрока:
// WARNING! : simple toString function. You should probably
// use a better one
function toString (obj) {
if (!isNaN(obj)) return ''+obj;
if (obj === true) return 'true';
if (obj === false) return 'false';
if (obj === null) return 'null';
if (obj === undefined) return 'undefined';
if (typeof obj == 'string') return '"'+obj+'"';
if (obj instanceof String) return '"'+obj+'"';
var ret="";
if (obj instanceof Array) {
ret += "[";
for (var i=0;i<obj.length;i++) {
ret += toString(obj[i]);
}
ret += "]";
}
else {
ret += "{";
for (var i in obj) {
if (obj.hasOwnProperty(i)) {
ret += toString(i);
ret += ':';
ret += toString(obj[i]);
}
}
ret += "}";
}
return ret;
}
Теперь остальной код:
var counter_el = document.getElementById('counter');
var count = counter_el.value*1;
// WARNING! : eval is a quick and dirty JSON deserializer
// normally should not be used but is good enough for
// this example:
eval('var currentRecords = ' + document.getElementById('holder').value);
var newRecord = {
name : type,
type : name,
date : date
}
if(count > 0){
currentRecords.allrows.push(newRecord);
}
else{
currentRecords = { allrows : [ newRecord ] };
}
counter_el.value=(counter_el.value*1)+ 1;
document.getElementById('holder').value=toString(currentRecords);