如何从json获取数据以便将它们保存在数据库中?

时间:2013-11-14 14:26:25

标签: javascript ajax json knockout.js

我是Javascript / jQuery的初学者,我正在研究用KnockoutJS制作的界面,所以我有几个模型。我想保存数据库中的所有数据,但我不知道该怎么做。

我开始时:

   self.save = function() {
        var data = ko.toJS(self);
        var test = ko.toJSON(self);
        console.log(test);
    }

   $.ajax({
       url: "myURL",
       data: {'carrier': data.carrier},
       type: "POST",
   });

这是console.log:

的结果
   {"id":1,"carrier":"1","Settings":[{"id":1,"price":{"id":1,"DeliveryStandard":"3.00","DeliveryExpress":"6.00","Details":{"id":1,"Standard":[{"id":1,"fromPrice":0,"maxPrice":"45.000"}],"Express"[{"id":1,"fromPrice":0,"maxPrice":"66.000"}]}}}}]}

我可以通过使用data.carrier来获取运营商的价值,但我不知道如何获取其他数据,如DeiveryStandard,DeliveryExpress,fromPrice,maxPrice ......

你有个主意吗?

提前谢谢你,如果我的问题很愚蠢,那就很抱歉!

3 个答案:

答案 0 :(得分:3)

如果您将JSON格式化为更易读的格式,并且使用缩进,则可以更容易理解:

(虽然应该注意到它只是技术上的JSON,而在字符串格式中,除此之外它只是一个标准的javascript对象)

{
"id":1,
"carrier":"1",
"Settings":[
    {
    "id":1,
    "price": { "id":1,
               "DeliveryStandard":"3.00",
               "DeliveryExpress":"6.00",
               "Details": { "id":1,
                            "Standard": [{"id":1,
                                          "fromPrice":0,
                                          "maxPrice":"45.000"
                                          }],
                            "Express" //Missing semi-colon
                                     [{"id":1,
                                        "fromPrice":0,
                                        "maxPrice":"66.000"
                                      }]
                          }
             }
   }}//One too many closing braces
   ]
}

首先要注意的是,您有2个语法错误,上面带有注释。所以先修复它们! (虽然我不知道它们是否是拼写错误,因为你似乎在它的最后工作)


然后我们可以查看结构树来找出你想要的值的位置......

DeiveryStandardDeliveryExpress都是分配给price的对象的属性,它是Settings数组中第一项的属性。所以你可以这样访问它们:

var DeliveryStandard = data.Settings[0].price.DeliveryStandard;
var DeliveryExpress= data.Settings[0].price.DeliveryExpress;
fromPricemaxPrice个项目中多次找到{p> StandardExpress。所以你需要决定你需要什么版本。如果您需要Standard,那么您可以像这样获取Standard数组的第一项:

var standardObject = data.Settings[0].price.Details.Standard[0];

然后您可以访问类似的属性:

var fromPrice = standardObject.fromPrice;
var maxPrice = standardObject.maxPrice;

我相信您可以了解如何获取相同数据的Express版本!


从您似乎已经能够自己解决的问题来看,我认为您的问题不知道如何处理数组。请注意,数组使用方括号[]定义,并且应使用从零开始的索引访问数组中的元素,例如:第一个元素为array[0],而array[1]为第二个元素。

答案 1 :(得分:0)

这应该有用。

console.log(data.Settings[0].price.DeliveryStandard);

答案 2 :(得分:0)

修正了JSON中的一些错误


var j = {
    "id" : 1,
    "carrier" : "1",
    "Settings" : [{
            "id" : 1,
            "price" : {
                "id" : 1,
                "DeliveryStandard" : "3.00",
                "DeliveryExpress" : "6.00",
                "Details" : {
                    "id" : 1,
                    "Standard" : [
                        {
                            "id" : 1,
                            "fromPrice" : 0,
                            "maxPrice" : "45.000"
                        }
                    ],
                    "Express": [
                        {
                            "id" : 1,
                            "fromPrice" : 0,
                            "maxPrice" : "66.000"
                        }
                    ]
                }
            }
        }
    ]
};

alert(j.Settings[0].price.DeliveryStandard);
alert(j.Settings[0].price.DeliveryExpress);
alert(j.Settings[0].price.Details.Standard[0].fromPrice);
alert(j.Settings[0].price.Details.Standard[0].maxPrice);