调用JSON值时如何使用变量

How can I use variables when calling JSON values?

本文关键字:何使用 变量 JSON 调用      更新时间:2023-09-26

我有一个将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数据属性

注意,undefineds58返回,其中没有属性名称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;