【问题标题】:json.stringify returns blank [ ] for one object and not a filled { }json.stringify 为一个对象返回空白 [ ] 而不是填充的 { }
【发布时间】:2010-12-09 17:43:26
【问题描述】:

我看过这篇文章: Jquery - JSON.stringify, array is empty 并且还检查了其他论坛并搜索了谷歌并没有找到合适的答案。

基本上,当我在我的已保存 [] 数组上使用 json.stringify 时,它会在除一个数组值之外的所有内容上正确创建 json 字符串,该数组值将在已保存 [2] 处。仅举一个例子,stringify 如何在数组中同时发布 1 和 2:

"1":{"doodleID":"716","tid":"26","outline":"sites/default/files/doodlekin/female24solid.swf","skin":"sites/default/files/doodlekin/female24face.swf","hair":"sites/default/files/doodlekin/female24hair.swf","misc":"sites/default/files/doodlekin/female24lips.swf","addlayer1":"","addlayer2":"","addlayer3":"","doodlename":"Mom","headsize":"95","flip":"true","skincolor":"E8B18C","skinblush":"sites/default/files/skin_color/e8b18c.swf","haircolor":"855D33","mouth":"sites/default/files/mouth/lips_color_d6570a_1.swf","neck":"sites/default/files/neck/pearl_necklace_solid.swf","neck_optlayer":"sites/default/files/neck/pearl_necklace_color.swf","neck_optcolor":"f8e5be"},
"2":[]

它正确地写出一个,但是当涉及到 2 时,这些值没有被正确地解析为 json 字符串。所以你知道保存的数组在 1 和 2 值时是什么样子,在这里(数组更大,我只是认为这应该是你需要看看出了什么问题。如果没有,请告诉我。它与 1 完美搭配, 而不是 2) :

  '1' ...
    'doodleID' => "716"
    'tid' => "26"
    'outline' => "sites/default/files/doodlekin/female24solid.swf"
    'skin' => "sites/default/files/doodlekin/female24face.swf"
    'hair' => "sites/default/files/doodlekin/female24hair.swf"
    'misc' => "sites/default/files/doodlekin/female24lips.swf"
    'addlayer1' => ""
    'addlayer2' => ""
    'addlayer3' => ""
    'doodlename' => "Mom"
    'headsize' => "95"
    'flip' => "true"
    'skincolor' => "E8B18C"
    'skinblush' => "sites/default/files/skin_color/e8b18c.swf"
    'haircolor' => "855D33"
    'mouth' => "sites/default/files/mouth/lips_color_d6570a_1.swf"
    'neck' => "sites/default/files/neck/pearl_necklace_solid.swf"
    'neck_optlayer' => "sites/default/files/neck/pearl_necklace_color.swf"
    'neck_optcolor' => "f8e5be"
'2' ...
    'doodleID' => "291"
    'tid' => "27"
    'outline' => "sites/default/files/doodlekin/male66solid.swf"
    'skin' => "sites/default/files/doodlekin/male66face.swf"
    'hair' => "sites/default/files/doodlekin/male66hair.swf"
    'misc' => ""
    'addlayer1' => ""
    'addlayer2' => ""
    'addlayer3' => ""
    'doodlename' => "John"
    'headsize' => "95"
    'skincolor' => "EEBF7C"
    'skinblush' => "sites/default/files/skin_color/eebf7c.swf"
    'haircolor' => "353535"
    'eyes' => ""
    'eyes_shadow' => ""
    'eyes_optlayer' => ""
    'eyes_optcolor' => ""
    'mouth' => "sites/default/files/mouth/goatee_solid.swf"
    'mouth_optlayer' => "sites/default/files/mouth/goatee_color.swf"
    'mouth_optcolor' => "646464"

我的问题是为什么当我使用时从保存中删除保存的[2]: postData = JSON.stringify(已保存);

但保存的数组在显示 2 时仍然存在。任何帮助都会非常充分,如果您需要更多见解,我会提供给您。我使用全局变量的原因是因为我使用了大约 10 个需要调用该变量的不同函数,并且我不想通过设计器忽略它。

更新:刚刚意识到这个问题也只发生在 firefox 上。我正在运行 firefox 4 Beta 7。这可能是 json.stringify 无法正常工作的原因吗? Irt 正在使用 Chrome 和 IE 8。

更新 2:整个保存的代码:

function userSavedDoodlekin(flag)
{   
    // For leave page check
    addToCartPage = "true";

    pID = $("#neededInfo .productID").text();
    tID = $("#neededInfo .templateID").text();
    pAttr = new Object();
    tBg = $("#neededInfo .templateBG").text();
    tCoords = $("#neededInfo .templateCoords").text();

    $("#neededInfo .productAttr").each(function(){
        pAttr[$(this).attr('alt')] = $(this).text();
    });

    store_doodlekin("product", pID, "productID");
    store_doodlekin("product", pAttr, "productAttr");
    store_doodlekin("product", tID, "templateID");
    store_doodlekin("product", tBg, "templateBG");
    store_doodlekin("product", tCoords, "templateCoords");

    // Data for post "json" serialized  
    postData = JSON.stringify( saved );
    flag = '';

    // Check for flag
    if(flag == "true")
    {
        flag = '?saved=true'; 
    }

    // Test before launch
    // alert(postData);
    // alert(dump(saved));

    // Save the doodlekin and start another loop for the next one to save if another in line.
    // Data Sent Back: object.status = (1 or 0), object.data = (error message)

    $.ajax({
        type: 'POST',
        dataType: 'json',
        data: "data="+postData,
        url: "/designer/save",
        success: function(obj){
            if(obj.status == 1){
                // alert(obj.data);
                window.location = "/cart";
            }
            else if(obj.status == 0){
                alert(obj.data);
            }
        },
        error: function(XMLHttpRequest, textStatus, errorThrown){
            alert("textStatus: "+textStatus);
            alert("errorThrown: "+errorThrown);
        }
    });

}

【问题讨论】:

  • 这可能是某个地方的拼写错误,可能在数据本身中。您可以在创建和显示 JSON 的位置发布代码吗?完整的括号,大括号和分号。编写一个工作(或失败)的最小问题示例的行为通常会揭示问题所在。
  • 检查帖子的更新,我认为不是这样的唯一原因是因为现在我知道它适用于 Firefox 3.5 + 3.6、IE 8 和 Chrome。我只在我的工作 PC 上的 Firefox 中遇到问题,Firefox 4 Beta 7。除此之外,当该数组被保存时,它在其余浏览器上完全可以正常工作。
  • 另外,刚刚意识到您所说的关于原型的内容,不,我在编码时通常坚持使用 jQuery。这是 drupal 的 1.3.2 版本。

标签: javascript json


【解决方案1】:

您使用的是旧版本的原型吗?我遇到了类似的问题,其中 Prototype(或其他库)添加了不兼容的 .toJSON 方法,这些方法会破坏 stringify。

【讨论】:

  • JSON.org/json2.js 2010-08-25 这是对我正在使用的当前版本进行最后一次更新的时间。如果你检查我的更新,atm 它在 Chrome 和 IE 中运行良好,我只是不确定是因为我使用的是 Firefox 4 Beta 7,还是插件正在做的事情,因为它只是偶尔发生.
猜你喜欢
  • 1970-01-01
  • 2013-05-05
  • 2016-03-21
  • 1970-01-01
  • 2021-10-08
  • 1970-01-01
  • 1970-01-01
  • 2019-06-05
  • 2021-01-11
相关资源
最近更新 更多