我想在javascript中遍历整个JSON,并找到从特定键开始的值。假设这是我的JSON数据:
var data = {
"array": [
1,
2,
3
],
"boolean": true,
"null": null,
"number": 123,
"object": {
"a": "b",
"abc":{
"mohit_ab": {
"id1":"i am id 1",
"abcd":{
"a" :"b",
"c":"d"
},
"who" : "who are you",
"id2":"i am id 2"
},
"mohit_231abcd": {
"id1":"i am id 3",
"identity" : "i am real mohit",
"id2":"i am id 4"
}
},
"hji":{
"mohit_adss231": {
"id1":"i am id 5",
"identity" : "i am mohit in real",
"id2":"i am id 6"
},
"mohit": {
"id7":"i am id 7",
"identity" : "i am mohit and you?",
"id8":"i am id 8"
}
},
"c": "d",
"e": "f"
},
"string": "Hello World"
};
我想在javascript中解析完整的JSON,并获得其键以"mohit"开头的值。
valueableData:{
"mohit_ab": {
"id1":"i am id 1",
"abcd":{
"a" :"b",
"c":"d"
},
"who" : "who are you",
"id2":"i am id 2"
},
"mohit_231abcd": {
"id1":"i am id 3",
"identity" : "i am real mohit",
"id2":"i am id 4"
},
"mohit_adss231": {
"id1":"i am id 5",
"identity" : "i am mohit in real",
"id2":"i am id 6"
},
"mohit": {
"id7":"i am id 7",
"identity" : "i am mohit and you?",
"id8":"i am id 8"
}
}
请告诉我实现这一目标的简单方法。
你可以使用for循环
var results = [];
for (var key in valueableData)
{
if ( key.indexOf("mohit") == 0 )
results.push(valueableData[key]);
}
结果数组将包含匹配的对象。
我为此做了一个函数:
var valueAbleData = {};
this.add = function(value) {
for (var key in value){
if(key.indexOf("mohit") > -1){
valueAbleData[key] = value[key];
}
else if(value[key] !== null && typeof value[key] === 'object'){
this.add(value[key]);
}
}
};
如果有人能提供更好的答案,请发布。:)
您在自己的答案中使用的递归方法是一个很好的通用解决方案,总是功能性的。
但是它完全遍历源对象,所以如果有大量嵌套的子对象,它可能会影响性能。
使用下面的解决方案,整个源对象也会被完全遍历,但工作是由JS内部完成的,这会更快
此外,代码更轻,可读性更强。
var data = {
"array": [
1,
2,
3
],
"boolean": true,
"null": null,
"number": 123,
"object": {
"a": "b",
"abc":{
"mohit_ab": {
"id1":"i am id 1",
"abcd":{
"a" :"b",
"c":"d"
},
"who" : "who are you",
"id2":"i am id 2"
},
"mohit_231abcd": {
"id1":"i am id 3",
"identity" : "i am real mohit",
"id2":"i am id 4"
}
},
"hji":{
"mohit_adss231": {
"id1":"i am id 5",
"identity" : "i am mohit in real",
"id2":"i am id 6"
},
"mohit": {
"id7":"i am id 7",
"identity" : "i am mohit and you?",
"id8":"i am id 8"
}
},
"c": "d",
"e": "f"
},
"string": "Hello World"
};
var valuableData = {};
JSON.parse(JSON.stringify(data), function(key, value) {
if (key.substr(0, 5) == 'mohit') {
valuableData[key] = value;
}
return value;
});
document.write('ValuableData:');
for (var key in valuableData) {
document.write('<br />' + key + ': ' + JSON.stringify(valuableData[key]));
}
问题内容: 我有这个代码 如何搜索? 问题答案: 正如简单地返回一个字典一样,您可以使用适用于字典的运算符: 编辑:要给出有关如何遍历数据的想法,请考虑以下示例: 检查数据结构将使您可以根据需要进行导航。您已经拥有的电话就是一个很好的起点。 Edit2:另一个尝试。这将获得您在词典列表中提到的文件。这样,我认为您应该能够使其适应您的需求。 然后 “在其中搜索”,执行以下操作:
我有一个带有标准分析器的弹性搜索集群。我知道使用这个分析仪,术语“300”被分析为一种类型。 假设我正在搜索一个具有字段“name”的文档,该字段的值为“纸巾300 CT”,分析为[“Paper”(ALPHANUM)、“tower”(ALPHANUM)、“300”(NUM)、“CT”(ALPHANUM)] 目前,当我使用模糊/通配符查询时,如下所示: 无论模糊性如何调整,模糊查询都不匹配。我希望术
问题 你想匹配或者搜索特定模式的文本 解决方案 如果你想匹配的是字面字符串,那么你通常只需要调用基本字符串方法就行, 比如 str.find() , str.endswith() , str.startswith() 或者类似的方法: >>> text = 'yeah, but no, but yeah, but no, but yeah' >>> # Exact match >>> text =
问题内容: 使用Sql Server 2008,您如何才能使用全文本搜索实际找到完全匹配的字符串。我对此很难过,只是在网上的任何地方都找不到令人满意的解决方案。 例如,如果我要搜索字符串“ Bojan Skrchevski”,则我希望第一个结果就是那个。 到目前为止,我已经尝试将字符串格式化为“ Bojan * NEAR Skrchevski *”并调用CONTAINSTABLE以获取结果,但是此
问题内容: 我正在寻找给定此数组的函数, 我想寻找针头 “面包” 并得到以下结果 问题答案: 使用。您可以提供一个回调,该回调确定哪些元素保留在数组中以及哪些元素应删除。(从回调返回的值指示应删除给定的元素。)类似这样的东西: 欲获得更多信息: 返回值
问题内容: 使用GAE搜索API是否可以搜索部分匹配项? 我正在尝试创建自动完成功能,其中该术语将是部分单词。例如。 b bui 构建 都将返回“建筑物”。 GAE怎么可能? 问题答案: 尽管全文搜索不支持LIKE语句(部分匹配),但是您可以修改它。 首先,为所有可能的子字符串标记数据字符串(hello = h,he,hel,lo等) 使用标记化的字符串构建索引+文档(搜索API) 执行搜索,然后