【问题标题】:Stringify a multi-dimension array with javascript使用 javascript 对多维数组进行字符串化
【发布时间】:2013-07-08 12:29:56
【问题描述】:

我正在为书籍创建发票,并打算通过 ajax 提交。我试图对发票中的书籍数组进行 json 编码,但是我一直得到一个空白值

 //create item list
    var order_items = [];
    $('#mi_books tbody tr.userbooks').each(function(index)
    {
        var bookisbn = $(this).find('td .mi_isbn').text();

        var bookdata = [];
        bookdata['isbn'] = bookisbn;
        bookdata['title'] = $(this).find('.mi_title').text();
        bookdata['qty'] = $(this).find('.mi_qty').text();
        bookdata['price'] = $(this).find('.mi_price').text();

        order_items.push(bookdata);

    });
    alert(JSON.stringify(order_items));
    alert(order_items.toString());
    console.log(order_items);

alert(JSON.stringify(order_items));
输出:[[]]

alert(order_items.toString());
输出:blank

console.log(order_items);
输出:

Array[1]
0: Array[0]
isbn: "9781401216672"
length: 0
price: "1007"
qty: "1"
title: "Batman: The Killing Joke"
__proto__: Array[0]
length: 1
__proto__: Array[0]

我的数组正在创建中,但不知何故我似乎无法对其进行 json 编码?我做错了吗?

【问题讨论】:

    标签: javascript jquery json web stringify


    【解决方案1】:

    ArrayObject 是不同的野兽。您的 bookdata 不是一个数组,而是一个对象,因此,您应该使用

    var bookdata = {};

    【讨论】:

    • 并且,为了便于阅读,使用bookdata.isbn = ... 代替方括号和字符串进行赋值(根据定义,在 ES5 规范中是相同的)。
    • 另见下面@Jack 的回答,您可以绑定空{} 的创建并填充它,如图所示(我可能也会这样做,作为第二步;我修复了直接的错误) .
    • 感谢您的解释,我认为 bookdata 也是一个数组,因为 console.log 输出显示为“数组”
    • @pinkpixycoder 是的,它是一个数组,你这样创建它:[]。该变量将保存您放入的内容,空数组[],空对象{} 或其他任何内容。
    【解决方案2】:

    JSON.stringify() 与常规对象相比,数组的序列化方式不同(仅 UInt32 的属性被序列化)。由于您只是将文本属性添加到 bookdata,因此您应该使用这样的匿名对象:

    var bookdata = {
        isbn: bookisbn,
        title: $(this).find('.mi_title').text(),
        qty: $(this).find('.mi_qty').text(),
        price: $(this).find('.mi_price').text()
    };
    

    【讨论】:

      【解决方案3】:

      你可以试试

      var order_items = {};
      $('#mi_books tbody tr.userbooks').each(function(index)
      {
          var bookisbn = $(this).find('td .mi_isbn').text();
      
          var bookdata = {
            'isbn': bookisbn,
            'title': $(this).find('.mi_title').text(),
            'qty': $(this).find('.mi_qty').text(),
            'price': $(this).find('.mi_price').text()
          };
          order_items[index] = bookdata;
      });
      alert(JSON.stringify(order_items));
      

      你唯一的错误是尝试创建关联数组而不是使用对象,这可以做到

      【讨论】:

      • 告诉你为什么不赞成
      • 您的代码完美运行!谢谢!我假设你的帖子被否决只是因为我问'我做错了什么',而不是代码本身:)
      猜你喜欢
      • 1970-01-01
      • 2014-08-05
      • 1970-01-01
      • 2012-03-28
      • 2012-12-17
      • 2015-10-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多