jQuery - 从JSON Stringify获取价值

时间:2017-04-23 11:39:21

标签: javascript jquery json

我有一个表单,我需要从以下位置获取值:

var formConfig = JSON.stringify($("#bookingform").serializeArray());

返回以下内容:

[{"name":"client_id","value":"1"},{"name":"consignee_id","value":""},{"name":"client","value":"DAKO"},{"name":"model","value":"2"},{"name":"type","value":"2"},{"name":"temperatur","value":"2"},{"name":"shipper_labels","value":"1"},{"name":"batteri_labels","value":"1"},{"name":"batteri_number","value":"2222"},{"name":"pickup","value":"April 27, 2017 18:25"},{"name":"intern_marks","value":"fdsfads"},{"name":"extern_marks","value":"sadsfdsf"},{"name":"consignee","value":""},{"name":"marks","value":""}]

然后我需要从JSON字符串中访问上述值,我将此函数用于:

var confirmBooking = function(element, setting, correct, notcorrect) {
    $('.confirm-booking')
    .find(element)
    .html(setting === 1 ? correct : notcorrect);
};

想到的是,我可以使用上面的功能:

confirmBooking('.config_batteri', formConfig.client_id, "Yes", "No");

依旧......

formConfig.client_id应该返回1,因为它是上面JSON字符串中的值。

然而它返回undefined

console.log(formConfig.client_id); // Returns "undefined"

5 个答案:

答案 0 :(得分:2)

您需要使用JSON.parse(),使其再次成为常规JavaScript对象。

JSON.stringify()所做的是,顾名思义,使它成为一个字符串。这只是一个常规字符串,表示JSON数据。它并没有神奇地拥有JSON数据属性。

此外serializeArray()返回{name: ..., value: ...}个对象的数组。如果您没有将其转换为JSON字符串,则执行formConfig.client_id仍无法轻松访问结果。您必须遍历formConfig数组,才能找到所需的名称/值对。

从它的外观来看,你根本不需要将JavaScript对象转换为JSON,如果你只想在同一个脚本中使用它(除非你要在其他地方发送JSON字符串)也许)。

根据OP的评论,我假设OP只想访问特定表单元素的值。使用jQuery,可以通过以下方式轻松完成:

// get the value of the client_id element (assuming it's an input element)
var client_id = $( '#bookingform input[name="client_id"]' ).val();
// call the function
confirmBooking( '.config_batteri', client_id, "Yes", "No" );

如果您想拥有一个包含所有表单值的对象,请查看this question中的答案。

答案 1 :(得分:0)

会改变语法帮助吗?请尝试

console.log(formConfig[0]['client_id']);

我希望它适合你

答案 2 :(得分:0)

我认为这就是你想要的。

console.log(formConfig.confirmBooking);

答案 3 :(得分:0)

TestingLocally

因为它是一个对象数组,所以你定位第一个返回一个对象的元素,然后使用" value"获取您期望的1的实际值的属性。

还可以使用parseInt("1")1作为"number"

类型

希望这能解决问题!我没有尽快

==编辑

var formConfig = [{
    "name": "client_id",
    "value": "1"
}, {
    "name": "consignee_id",
    "value": ""
}, {
    "name": "client",
    "value": "DAKO"
}];

// This function returns the value for the name
function search(str) {

    for (var obj of formConfig) {
        if (obj.name == str) {
            return obj.value;
        }
    }
}

search("client_id"); // 1
search("client"); // DAKO

答案 4 :(得分:0)

这样做:

var jsonStr = '[{"name":"client_id","value":"1"},
                {"name":"consignee_id","value":""},
                {"name":"client","value":"DAKO"},
                {"name":"model","value":"2"},
                {"name":"type","value":"2"},
                {"name":"temperatur","value":"2"},
                {"name":"shipper_labels","value":"1"},
                {"name":"batteri_labels","value":"1"},
                {"name":"batteri_number","value":"2222"},
                {"name":"pickup","value":"April 27, 2017 18:25"},
                {"name":"intern_marks","value":"fdsfads"},
                {"name":"extern_marks","value":"sadsfdsf"},
                {"name":"consignee","value":""},
                {"name":"marks","value":""}]';

var obj = JSON.parse(jsonStr);
var val = obj[0].value;

您无法执行obj[0].name的原因是因为您解析的JSON对象具有一组对象,其中第一个对象具有以下结构:

{
    name:"client_id",
    value:"1"
}

因此,您必须使用obj[0].value NOT obj[0].name来访问它,因为它会为您提供client_id