Javascript 按嵌套JSON中以特定字符串开头的值进行搜索

Javascript 按嵌套JSON中以特定字符串开头的值进行搜索,javascript,json,object,Javascript,Json,Object,示例嵌套JSON { "a": "https://example1.com", "b": { "c":"https://example2.com", "d": { "e": "www.example3.com"

示例嵌套JSON

    {
          "a": "https://example1.com",
          "b": {
            "c":"https://example2.com",
            "d": {
              "e": "www.example3.com"
            }
          },
         "f": {
            "g":"https://example4.com"
          }

        }
      }
要筛选仅以“http”开头的值。找不到嵌套json的任何示例

(可选)是否有方法在对象扫描npm中实现此目的

预期结果

['https://example1.com', 'https://example2.com', 'https://example4.com']

循环键,检查类型,根据需要重复:

function loopAndParse(thing, rtn) {
    Object.keys(thing).forEach(k => {
        if (typeof thing[k] === "string" && thing[k].indexOf("https://") > -1) 
            rtn.push(thing[k])
        else if (typeof thing[k] === "object") return loopAndParse(thing[k], rtn)
    })
    return rtn;
}

console.log(loopAndParse(obj, []))

拨弄:

循环键,检查类型,根据需要重复:

function loopAndParse(thing, rtn) {
    Object.keys(thing).forEach(k => {
        if (typeof thing[k] === "string" && thing[k].indexOf("https://") > -1) 
            rtn.push(thing[k])
        else if (typeof thing[k] === "object") return loopAndParse(thing[k], rtn)
    })
    return rtn;
}

console.log(loopAndParse(obj, []))

Fiddle:

递归提取值,平整数组,通过https
https过滤数组

const foo={
“a”:https://example1.com",
“b”:{
“c”:https://example2.com",
“d”:{
“e”:“www.example3.com”
}
},
“f”:{
“g”:”https://example4.com"
}
}
函数值(数据){
常量运行=数据=>{
返回Object.values(数据).map(值=>{
如果(值的类型==='object'){
返回值(值)
}否则{
返回值
}
})
}
返回运行(数据)。平坦(无限)
}
设a=extractValues(foo).filter(url=>/^https/.test(url))

log(a)
递归提取值,平整数组,通过https
https过滤数组

const foo={
“a”:https://example1.com",
“b”:{
“c”:https://example2.com",
“d”:{
“e”:“www.example3.com”
}
},
“f”:{
“g”:”https://example4.com"
}
}
函数值(数据){
常量运行=数据=>{
返回Object.values(数据).map(值=>{
如果(值的类型==='object'){
返回值(值)
}否则{
返回值
}
})
}
返回运行(数据)。平坦(无限)
}
设a=extractValues(foo).filter(url=>/^https/.test(url))

console.log(a)
以下是您将如何使用(如问题中所述)解决此问题

//const objectScan=require('object-scan');
常量数据={a:'https://example1.com,b:{c:'https://example2.com,d:{e:'www.example3.com'}},f:{g:'https://example4.com' } };
console.log(objectScan(['**']){
反面:错,
filterFn:({value})=>typeof value==='string'&&value.startsWith('http'),
rtn:'价值'
})(数据);
// => [ 'https://example1.com', 'https://example2.com', 'https://example4.com']
。作为控制台包装{最大高度:100%!重要;顶部:0}

以下是您将如何使用(如问题中所述)解决此问题

//const objectScan=require('object-scan');
常量数据={a:'https://example1.com,b:{c:'https://example2.com,d:{e:'www.example3.com'}},f:{g:'https://example4.com' } };
console.log(objectScan(['**']){
反面:错,
filterFn:({value})=>typeof value==='string'&&value.startsWith('http'),
rtn:'价值'
})(数据);
// => [ 'https://example1.com', 'https://example2.com', 'https://example4.com']
。作为控制台包装{最大高度:100%!重要;顶部:0}

循环键,检查类型的值,如果是字符串,解析开始,否则,循环内部对象。。。etcLoop键,检查类型的值,if字符串,parse start,else,循环内部对象。。。这个图书馆很棒。你能@vincent在你的github自述中详细说明这些例子吗?目前,这些有用的例子分散在stackoverflow上。好主意。自述文件中有很多例子,但我也应该包括更多涉及的例子。这个库很棒。你能@vincent在你的github自述中详细说明这些例子吗?目前,这些有用的例子分散在stackoverflow上。好主意。自述文件中有很多例子,但我也应该包括更多涉及的例子。