当前位置: 首页 > 知识库问答 >
问题:

解析匹配值的完整json和搜索键

上官季
2023-03-14

我想在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"
      }
}

请告诉我实现这一目标的简单方法。

共有3个答案

景星华
2023-03-14

你可以使用for循环

var results = [];
for (var key in valueableData)
{
    if ( key.indexOf("mohit") == 0 )
      results.push(valueableData[key]);
}

结果数组将包含匹配的对象。

史经业
2023-03-14

我为此做了一个函数:

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]);
            }
            }
    };

如果有人能提供更好的答案,请发布。:)

宋飞掣
2023-03-14

您在自己的答案中使用的递归方法是一个很好的通用解决方案,总是功能性的。
但是它完全遍历源对象,所以如果有大量嵌套的子对象,它可能会影响性能。

使用下面的解决方案,整个源对象也会被完全遍历,但工作是由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) 执行搜索,然后