查找使用多个字符串值的JSON嵌套节点
Find JSON nested nodes using multiple string values
我有一个需要基于两个不同参数计算价格的屏幕,primary(在示例中是activity)和children(在示例中是ticketType)
以前这是做得很拙劣的,所以我决定最好的选择是将价格存储在运行时填充的JSON对象中,并基于点击&更改事件
所以我有这个json格式,请注意你也可以改变它,而不是固定的
{
"activities": [{
"activitycode": "TK",
"desc": "Tickets",
"ticketTypes": [{
"ticketcode": "G",
"baseprice": 79
}, {
"ticketcode": "P",
"baseprice": 109
}]
}, {
"activitycode": "PK",
"desc": "Parking",
"ticketTypes": [{
"ticketcode": "BK",
"baseprice": 65
}, {
"ticketcode": "ESC-I",
"baseprice": 40
}]
}], //end activities
"handlingPercent": "0.03",
"shipping": "15"
}
因此,我尝试遍历JSON对象以获得正确的价格,如下所示
pricing.activities.activitycode['TK'].ticketTypes.ticketcode['G'].baseprice
但是这不起作用,因为在提供值
之前我还没有指定要去的数值节点一旦我这样做了,下面的工作
pricing.activities[0].ticketTypes[0].baseprice
但是我想完成的是提供字符串/文本值,遍历父节点,然后是子节点,并找到值
我想我可以写$。每次迭代都是这样,但我想先知道专家们是怎么想的,如果这确实是处理事情的最好方法
$.each(pricing.activities, function(arrayID, activityData) {
if(activityData.activitycode=="TK")
$.each(activityData.ticketTypes, function(ticketTypeID, typeData) {
if(typeData.ticketcode=="G")
alert(typeData.baseprice);
});
});
在讨论代码之前,让我们先讨论一下JSON数据。
首先,我重新格式化了数据,以便更容易地遵循结构:
{
"activities": [
{
"activitycode": "TK",
"desc": "Tickets",
"ticketTypes": [
{ "ticketcode": "G", "baseprice": 79 },
{ "ticketcode": "P", "baseprice": 109 }
]
},
{
"activitycode": "PK",
"desc": "Parking",
"ticketTypes": [
{ "ticketcode": "BK", "baseprice": 65 },
{ "ticketcode": "ESC-I", "baseprice": 40 }
]
}
],
"handlingPercent": "0.03",
"shipping": "15"
}
现在结构已经清楚了,这里有一个问题:你有一个activities
数组,在该数组的每个元素中都有一个ticketTypes
数组。
这些数组中元素的顺序重要吗?也就是说,它们是否用于生成必须按正确顺序排列的显示列表?
如何访问这些数组呢?你主要是循环遍历它们并处理所有元素吗?或者你用它们来查找单个元素给定已知的activitycode
和ticketcode
-这是嵌套的$.each
循环在你的问题结束结束做什么?
根据这些问题的答案,您可能更适合使用不同类型的结构。也许像这样:
{
"activities": {
"TK": {
"desc": "Tickets",
"ticketTypes": {
"G": { "baseprice": 79 },
"P": { "baseprice": 109 }
}
},
"PK": {
"desc": "Parking",
"ticketTypes": {
"BK": { "baseprice": 65 },
"ESC-I": { "baseprice": 40 }
}
}
},
"handlingPercent": "0.03",
"shipping": "15"
}
因为现在这段代码(我也清理了这里的缩进):
$.each( pricing.activities, function( arrayID, activityData ) {
if( activityData.activitycode=="TK" ) {
$.each( activityData.ticketTypes, function( ticketTypeID, typeData ) {
if( typeData.ticketcode=="G" )
alert( typeData.baseprice );
});
}
});
可以替换为:
alert( pricing.activities.TK.ticketTypes.G.baseprice );
和其他类似的代码也会更简单。这样做的唯一损失是activities
和ticketTypes
的顺序保证:数组有保证的顺序,而对象没有。
您试过$.grep()
吗?
var test = $.grep(pricing.activities, function(e){ return e.activitycode == 'TK'; });
var test2 = $.grep(test[0].ticketTypes, function(e){ return e.ticketcode == "G";});
console.log(test2[0].baseprice);
小提琴。关于$.grep()
的jQuery API文档在这里
这个问题的例子
我不会说它比$.each()
好,但如果你对这类事情感兴趣,它是另一种方法。
- Javascript-JSON-嵌套和分组
- JSON 嵌套 Ul 来自 Javascript 中的单维或多维 json 对象
- 如何从 json 嵌套结构中获取键的 json 值
- 如何使用角度获取这些 json 嵌套值
- 使用jquery加载json嵌套对象
- 如何在JavaScript中从url解析json(嵌套)
- 如何在 Python 和 JavaScript 中以相同的方式散列“json”嵌套字典
- 对象和数组的复杂 JSON 嵌套
- JSON嵌套对象分析
- Evaluate Json-嵌套的Json路径以字符串形式提供
- JSON嵌套“;第n级”;对象数组转换为多维数组
- jQuery JSON嵌套循环
- 查找使用多个字符串值的JSON嵌套节点
- 浏览json嵌套文件
- Angularjs的ng-repeat下拉菜单从json嵌套
- JSON嵌套对象vs Javascript数组
- 重复使用不同的json嵌套
- 我如何使用d3.js导航JSON嵌套文件
- Grails 2.4.4绑定JSON嵌套对象
- JSON 嵌套解析帮助使用 $.each