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

2022-03-22 22:20:15 +08:00
 placeholder

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

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

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

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

我该怎么写才能实现:

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

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

9671 次点击
所在节点    Node.js
20 条回复
noe132
2022-03-22 22:26:24 +08:00
for 循环都不会写了吗?

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

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

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

这样的东西?
cpstar
2022-03-23 09:28:37 +08:00
JSON.stringify(---).substring(---) > -1
cpstar
2022-03-23 09:29:19 +08:00
修正 13# JSON.stringify(---).indexOf(---) > -1
遍什么历。。。
Zroot
2022-03-23 10:19:57 +08:00
激战 2 ,同好啊
zhaol
2022-03-23 10:27:11 +08:00
不去拯救凯珊大陆,在这搞花里胡哨的?
shawndev
2022-03-23 10:38:58 +08:00
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
2022-03-24 03:50:17 +08:00
哎呀感谢各位指导,嘿嘿嘿
placeholder
2022-03-25 13:30:34 +08:00
@wangtian2020 太感谢了,确实没想到能直接 require 进来

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/842206

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX