调用JSON值时如何使用变量
How can I use variables when calling JSON values?
我有一个将XML转换为"JSON"的脚本。可用的数据能够使用styles.Default.FontName
来访问(例如)。但是,我需要能够使用一个变量,而不是手动在该行中插入"Default"。我需要能够使用许多不同的风格组合。XXXX.XXX'。
这是我的脚本函数convertData(xml){
var styles = {}
$(xml).find('Style').each(function() {
var id = $(this).attr('ss:ID');
var name = $(this).attr('ss:Name');
var type = $(this).children();
var style = {};
styles[id] = style;
style['Name'] = name;
type.each(function() {
$.each(this.attributes, function() {
if (this.specified) {
style[stripPrefix(this.name)] = this.value;
}
});
});;
// You can now use 'styles.s57.FontName' and the like to return values :)
});
$(xml).find('Worksheet').each(function() {
var name = $(this).attr('ss:Name');
var data = $(this).find('Data');
data.each(function() {
var cell = $(this).parent('Cell');
var value = $(this).text();
var styleId = cell.attr('ss:StyleID');
$(window).load(function() {
// Here is my issue (see below for working calls...)
// This guy doesn't work (because of the 'styleId' variable not being an actual style id like 's57')
$('.testing').append('<span class="color:#f60;">' + styles.styleId.Color + '</span>');
});
});
});
$(document).ready(function() {
$('body').append('<div class="testing"/>');
// Works fine
$('.testing').html(styles.Default.FontName);
$('.testing').append(styles.s59.Bold);
$('body').append('<div class="json-output"/>');
$('.json-output').append(JSON.stringify(styles));
for (var i in styles) {
console.log(i);
}
});
}
那么,如何在此处使用变量而不是指定"Default"或"s59"呢?非常感谢您的帮助!
为了澄清我的问题**styles.Default.FontName**
的使用效果良好。我只需要能够用一个变量动态交换"Default"。为什么?因为我将使用这个内部循环,这些循环遍历每个都有不同"样式ID"的"单元格"。上面通过data.each()显示了这个循环。因此,每次迭代都可能引用不同的"StyleID"。
但是,当我使用styles.SomeVariable.SomeStyle
时,它不是插入我为"SomeVariable"设置的值,而是引用"SomeVariable"的JSON对象。。。
更新:
jsFiddle
供参考-生成的JSON
{
"Default":{
"Name":"Normal",
"Vertical":"Bottom",
"FontName":"Calibri",
"Family":"Swiss",
"Size":"11",
"Color":"#000000"
},
"s57":{
"Name":"Hyperlink",
"FontName":"Calibri",
"Family":"Swiss",
"Size":"11",
"Color":"#0066CC",
"Underline":"Single"
},
"s58":{
"Horizontal":"Left",
"Vertical":"Center",
"Indent":"1"
},
"s59":{
"Vertical":"Center",
"WrapText":"1",
"FontName":"Calibri",
"Family":"Swiss",
"Size":"11",
"Color":"#000000",
"Bold":"1"
}
}
编辑、更新
尝试用var styleId = cell.data('styleid');
代替var styleId = cell.data('styleID');
;因为CCD_ 6属性名称被转换为小写。
请参阅jquery获取带连字符和区分大小写的HTML 5数据属性
注意,undefined
在s58
返回,其中没有属性名称Color
。
jsfiddlehttp://jsfiddle.net/yao01h4b/10/
尝试
var name = "styleId"
, option = {};
option[name] = styles.s57;
var styleId = $.extend(styles, option);
// do stuff with `styles.styleId.s57`
document.write(styles.styleId.FontName);
请参阅jQuery.extend()
var styles = {
"Default":{
"Name":"Normal",
"Vertical":"Bottom",
"FontName":"Calibri",
"Family":"Swiss",
"Size":"11",
"Color":"#000000"
},
"s57":{
"Name":"Hyperlink",
"FontName":"Calibri",
"Family":"Swiss",
"Size":"11",
"Color":"#0066CC",
"Underline":"Single"
},
"s58":{
"Horizontal":"Left",
"Vertical":"Center",
"Indent":"1"
},
"s59":{
"Vertical":"Center",
"WrapText":"1",
"FontName":"Calibri",
"Family":"Swiss",
"Size":"11",
"Color":"#000000",
"Bold":"1"
}
};
var name = "styleId"
, option = {};
option[name] = styles.s57;
var styleId = $.extend(styles, option);
document.write(styles.styleId.FontName)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js">
</script>
使用[]
表示法分配对象属性的方法相同
var someVal = object[variable];
您也可以组合符号类型
var someVal = object[variable][anotherVariable].someProperty;
- AngularJS-在JSON选择器中使用变量名
- 在另一个函数中使用变量this
- Javascript使用变量设置属性
- 我不能使用变量作为javascript参数
- 如何在函数之外使用变量
- 在Jquery中使用变量作为对象名称
- 如何使用变量填充iframe源
- 如何在JavaScript中创建对象时使用变量的值
- 为什么不是't my元素:使用变量而不是字符串时包含(变量)功?jquery
- 如何使用变量从对象的第n个子键获取值
- 在正则表达式中使用变量
- jade/pug是否可以在include语句中使用变量
- 在Zepto动画函数中使用变量
- 在 document.querySelector 中使用变量
- 在Java代码中的javascript函数中使用变量
- 使用变量的名称,然后为该变量定义函数
- 在函数参数中使用变量,无论是否使用Jquery
- 在 javascript css 属性中使用变量
- 使用变量作为对象的属性名称
- AngularJS在不使用变量的情况下将服务注入模块中,这样就可以缩小它