Я пытаюсь создать объект JSON динамически, используя несколько циклов .each(). Я попытался использовать .push(), но я смог получить только первый «уровень» объекта JSON (первый массив).Создание и заполнение объекта JSON с помощью jQuery через циклы
JS анализирует файл Excel (2003/XML) и должен выводить этот «стили» объекта JSON, чтобы я мог использовать его для генерации CSS на страницах (страницах). Таким образом, мы сохраняем таблицу Excel XML, мой JS использует AJAX для «GET», затем анализирует ее, извлекая стили (и рабочие листы/их данные). Процесс извлечения должен затем «динамически» создать этот объект JSON, который будет использоваться в другом месте JS-файла.
Вот что мне нужно JSON, чтобы быть после того, как различные функции и петля в комплекте (если не лучшая структура или структура, которая имеет больше смысла для моей ситуации) ...
var styles = [
"Default": {
"Name": "Normal",
"Style": {
"Alignment": {
"Vertical": "Bottom"
},
"Font": {
"Name": "Calibri",
"Family": "Swiss",
"Size": "11",
"Color": "#000000"
}
}
},
"s57": {
"Name": "Hyperlink",
"Style": {
"Font": {
"Name": "Calibri",
"Family": "Swiss",
"Size": "11",
"Color": "#0066CC",
"Underline": "Single"
}
}
}
]
МОЯ JS (пока)
var styles = []
$(xml).find('Style').each(function(){
var style = {}
var id = $(this).attr('ss:ID');
var type = $(this).children();
type.each(function() {
$.each(this.attributes, function() {
if (this.specified) {
style[this.name] = this.value;
}
});
});
styles.push(style);
console.log(styles);
});
Это не работает так хорошо. Как только я добавил style[this.name] = this.value
, консоль показывала кучу записей «X: Объект».
SO, как я могу сгенерировать объект JSON «динамически», используя петли .each() и $ .each() выше?
Заранее благодарен!
P.S. Я искал совсем немного, чтобы попытаться найти ответ на это уже. Я нашел биты и куски о том, как сделать некоторые из этого, но ни один, населявшего объекта ... интеллектуально вырабатывать
EDIT:
Вот XML-файл, который я «разбор»:
UPDATE:
Я получаю ближе с этим:
// Create JSON Object "styles"
var styles = [];
$(xml).find('Style').each(function(){
var style = {};
var id = $(this).attr('ss:ID');
var type = $(this).children();
type.each(function() {
$.each(this.attributes, function() {
if (this.specified) {
style[this.name] = this.value;
}
});
});
//styles[id] = style;
styles.push(style);
});
console.log(styles);
$(document).ready(function(){
$('body').append('<div class="json-output"/>');
$('.json-output').append(JSON.stringify(styles));
});
** JSON.stringify(styles)
теперь выводит это с выше сценариев
[
{
"ss:Vertical":"Bottom",
"ss:FontName":"Calibri",
"x:Family":"Swiss",
"ss:Size":"11",
"ss:Color":"#000000"
},
"ss:FontName":"Calibri",
"x:Family":"Swiss",
"ss:Size":"11",
"ss:Color":"#0066CC",
"ss:Underline":"Single"
},
{
"ss:Horizontal":"Left",
"ss:Vertical":"Center",
"ss:Indent":"1"
}, {
"ss:Vertical":"Center",
"ss:WrapText":"1",
"ss:FontName":"Calibri",
"x:Family":"Swiss",
"ss:Size":"11",
"ss:Color":"#000000",
"ss:Bold":"1"
},
{
"ss:Vertical":"Center",
"ss:WrapText":"1",
"ss:FontName":"Calibri",
"x:Family":"Swiss",
"ss:Size":"11",
"ss:Color":"#008000",
"ss:Bold":"1"
},
{
"ss:Vertical":"Center",
"ss:WrapText":"1"
},
{
"ss:Vertical":"Center",
"ss:WrapText":"1",
"ss:FontName":"Calibri",
"x:Family":"Swiss",
"ss:Size":"11",
"ss:Color":"#808080",
"ss:Bold":"1",
"ss:Pattern":"Solid"
},
{
"ss:Horizontal":"Left",
"ss:Vertical":"Bottom"
},
{
"ss:Horizontal":"Left",
"ss:Vertical":"Center",
"ss:WrapText":"1",
"ss:Format":"0"
},
{
"ss:Horizontal":"Left",
"ss:Vertical":"Center",
"ss:Indent":"1",
"ss:WrapText":"1"
}
]
...
Это не JSON, это просто обычный объект Javascript. – Nit
Вы бросили инструкцию отладчика перед назначением значения, чтобы узнать, что это за значение? – Daved
@ Нит, так мне сказали. Я вижу '{' и '[', и я принимаю это за JSON. Не могли бы вы объяснить, что сделает этот «JSON»? Единственное, что я изменил с http://json.org/example, это «var styles = []» (заменил '{'' s на '['. Я вижу '[&]', используемый в" JSON " tutorials. Как это будет переработано как «JSON»? – derekmx271