V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
placeholder
V2EX  ›  Node.js

请各位把代码甩我脸上,读取 json 文件之后怎么搜索

  •  
  •   placeholder · 2022-03-22 22:20:15 +08:00 · 9409 次点击
    这是一个创建于 736 天前的主题,其中的信息可能已经有所发展或是发生改变。

    是为了写一个 utools 的插件,这个插件支持使用 nodejs

    使用 fs.readFileSync(fileUrl) 读取 json 文件。

    然后用 JSON.Parse 转换成 JSON Object ,

    Json 文件内的结构大概是这样的:

    qQgexO.png

    我该怎么写才能实现:

    查询到有这个数据时,列出这个数据,结束查找。

    查到最后没有这个数据,列出一个提示,结束查找。

    noe132
        1
    noe132  
       2022-03-22 22:26:24 +08:00
    for 循环都不会写了吗?

    for(元素 of 数组) {
    if (是你要的(元素)) { return 元素 }
    }
    return 没有
    zmal
        2
    zmal  
       2022-03-22 22:28:22 +08:00
    不就是遍历对象么?难点在哪。
    raykle
        3
    raykle  
       2022-03-22 22:31:28 +08:00
    都转成 JSON obj 了,后面不会写?跟你接口请求到这个 list 有什么区别?
    v2byy
        5
    v2byy  
       2022-03-22 22:58:33 +08:00
    jsonpath
    DOLLOR
        6
    DOLLOR  
       2022-03-22 23:17:38 +08:00
    data.find(i=>i 是否满足条件)

    不过我觉得一上来就让你用 find 方法会有点强人所难,干脆就用 for 循环吧。
    DuXing
        7
    DuXing  
       2022-03-23 00:28:40 +08:00
    甩你一个包`fuzzy-search`,你值得拥有~
    2NUT
        8
    2NUT  
       2022-03-23 00:43:31 +08:00
    你首先要明白 在 js 里 json 就是一个结构体对象 不是字符串
    qbug
        9
    qbug  
       2022-03-23 02:14:52 +08:00 via Android   ❤️ 1
    单次搜索当然用循环完事儿了,毕竟 js 单线程你也不可能做什么多线程优化,用全局函数或者别人的库都是一样的。如果你想对同一个键进行多次搜索并且列表的数量级非常巨大的话,那可能需要建立一个字典其实就是哈希表以便于多次查询,就是你新建一个对象,然后用需要查询的这个属性作为键,然后你再用这个属性调用这个对象的内容的时候引擎会自动帮你优化成哈希表查询,坏处就是会占更多的内存。
    然而说了这么多,终究你还是不应该把计算逻辑大量的放在 js 里面。。。
    yulon
        10
    yulon  
       2022-03-23 02:25:23 +08:00   ❤️ 5
    ???
    biubiuF
        11
    biubiuF  
       2022-03-23 04:22:21 +08:00
    遍历
    GeruzoniAnsasu
        12
    GeruzoniAnsasu  
       2022-03-23 06:28:31 +08:00
    我觉得又是个表达问题

    我猜 OP 的原意是在反序列化的过程中中断读取文件流
    你是否在找类似于
    http://rapidjson.org/zh-cn/md_doc_sax_8zh-cn.html

    这样的东西?
    cpstar
        13
    cpstar  
       2022-03-23 09:28:37 +08:00
    JSON.stringify(---).substring(---) > -1
    cpstar
        14
    cpstar  
       2022-03-23 09:29:19 +08:00
    修正 13# JSON.stringify(---).indexOf(---) > -1
    遍什么历。。。
    Zroot
        15
    Zroot  
       2022-03-23 10:19:57 +08:00
    激战 2 ,同好啊
    zhaol
        16
    zhaol  
       2022-03-23 10:27:11 +08:00
    不去拯救凯珊大陆,在这搞花里胡哨的?
    shawndev
        17
    shawndev  
       2022-03-23 10:38:58 +08:00
    wangtian2020
        18
    wangtian2020  
       2022-03-23 14:12:37 +08:00
    json 文件为什么还要用 fs 读取,require 进来直接就是 json 对象了

    const mJsonArray = require('./foo.json ')

    在 json 上搜索东西,其实就是在 JavaScript 的 array 对象上搜索
    array.find(v=>v.xxx == 'foo')

    数据量比较大就上数据库吧
    placeholder
        19
    placeholder  
    OP
       2022-03-24 03:50:17 +08:00
    哎呀感谢各位指导,嘿嘿嘿
    placeholder
        20
    placeholder  
    OP
       2022-03-25 13:30:34 +08:00
    @wangtian2020 太感谢了,确实没想到能直接 require 进来
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   4216 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 10:14 · PVG 18:14 · LAX 03:14 · JFK 06:14
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.