我有一个构造json对象的脚本,并将其分配给表单文本元素,如下所示:
<input id="clientList" type="hidden" value="[{"clientID":"1","clientType":"0","clientPrice":"450.00","tourID":"9","insuranceAvailable":"0"},{"clientID":"2","clientType":"2","clientPrice":"0.00","tourID":"9","insuranceAvailable":"0"}]">
我需要(使用Jquery或JS),总结该字符串中的所有clientPrice键。
我正在尝试的代码是:
var totalRoomPrices = 0;
var travellerPricesToSum = JSON.stringify($('#clientList').serializeArray());
$.each(travellerPricesToSum, function () {
totalRoomPrices += this.clientPrice;
});
console.log(totalRoomPrices);
任何人都可以提供一些见解,告诉我我做错了什么以及如何解决这个问题?
由于
答案 0 :(得分:3)
您需要解析
value
,因为它是json
的字符串表示形式。JSON.stringify
会将object
转换为string
,而不是这里的情况。另请注意,"
中包含的"
内部字符串会破坏字符串,要么转义它们,要么在'
内使用"
,反之亦然。
由于值为strings
,+=
会隐瞒它们。要使添加工作(考虑浮动值),请使用parseFloat
将其转换为float
试试这个:
var totalRoomPrices = 0;
var travellerPricesToSum = JSON.parse($('#clientList').val());
$.each(travellerPricesToSum, function() {
totalRoomPrices += parseFloat(this.clientPrice);
});
alert(totalRoomPrices);
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
<input id="clientList" type="hidden" value='[{"clientID":"1","clientType":"0","clientPrice":"450.00","tourID":"9","insuranceAvailable":"0"},{"clientID":"2","clientType":"2","clientPrice":"0.00","tourID":"9","insuranceAvailable":"0"}]'>
&#13;
答案 1 :(得分:0)
您不能在value属性中使用相同的引号样式。你必须找到另一种方法来对值属性中的字符串中的结构化数据进行编码,我见过人们使用|和:字符作为分隔符,显然你必须使用str.split()
编写自己的解析器。
编辑:显然,如果你按照另一个答案混合单引号和双引号,那么持有整个JSON字符串也是一个选项。