繁体   English   中英

从键值中查找并提取对象json

[英]find and extract object json from key value

我正在尝试从 json 文件中提取特定对象,记下密钥,然后我想返回新的 json。 问题是我的文件很复杂。 作为后端,我使用 expressjs

示例.json

'[{"ServID":"Rai 1","Parametri":[{"Pid":"258","Text":"PMT"},{"Pid":"512","Text":"MPEG-2 Video (720x576i, @25 Hz, 16:9, 4:2:0)"},{"Pid":"576","Text":"Teletext (ita, Initial Teletext page)"},{"Pid":"650","Text":"MPEG-2 Audio (ita, Audio layer II, 192 kb/s, @48,000 Hz, stereo)"},{"Pid":"694","Text":"MPEG-2 Audio (Audio layer II, 64 kb/s, @48,000 Hz, single channel)"},{"Pid":"699","Text":"MPEG-2 Audio (eng)"},{"Pid":"2001","Text":"MPEG-2 Private sections (AIT)"},{"Pid":"2002","Text":"MPEG-2 Private sections (AIT)"},{"Pid":"3001","Text":"DSM-CC U-N (MHP Object Carousel)"},{"Pid":"3002","Text":"DSM-CC U-N (HbbTV)"},{"Pid":"3101","Text":"DSM-CC Stream Descriptors"}]},{"ServID":"Rai 2","Parametri":[{"Pid":"257","Text":"PMT"},{"Pid":"513","Text":"MPEG-2 Video (720x576i, @25 Hz, 16:9, 4:2:0)"},{"Pid":"577","Text":"Teletext (ita, Initial Teletext page)"},{"Pid":"651","Text":"MPEG-2 Audio (ita, Audio layer II, 192 kb/s, @48,000 Hz, stereo)"},{"Pid":"695","Text":"MPEG-2 Audio (Audio layer II, 64 kb/s, @48,000 Hz, single channel)"},{"Pid":"696","Text":"MPEG-2 Audio (eng, Audio layer II, 192 kb/s, @48,000 Hz, stereo)"},{"Pid":"2001","Text":"MPEG-2 Private sections (AIT)"},{"Pid":"2002","Text":"MPEG-2 Private sections (AIT)"},{"Pid":"3001","Text":"DSM-CC U-N (MHP Object Carousel)"},{"Pid":"3002","Text":"DSM-CC U-N (HbbTV)"},{"Pid":"3101","Text":"DSM-CC Stream Descriptors"}]},{"ServID":"Rai 3 TGR Sardegna","Parametri":[{"Pid":"256","Text":"PMT"},{"Pid":"514","Text":"MPEG-2 Video (720x576i, @25 Hz, 16:9, 4:2:0)"},{"Pid":"578","Text":"Teletext (ita, Initial Teletext page)"},{"Pid":"652","Text":"MPEG-2 Audio (ita, Audio layer II, 192 kb/s, @48,000 Hz, stereo)"},{"Pid":"697","Text":"MPEG-2 Audio (Oth, Audio layer II, 64 kb/s, @48,000 Hz, single channel)"},{"Pid":"2001","Text":"MPEG-2 Private sections (AIT)"},{"Pid":"2002","Text":"MPEG-2 Private sections (AIT)"},{"Pid":"3001","Text":"DSM-CC U-N (MHP Object Carousel)"},{"Pid":"3002","Text":"DSM-CC U-N (HbbTV)"},{"Pid":"3101","Text":"DSM-CC Stream Descriptors"}]},{"ServID":"Rai Radio1","Parametri":[{"Pid":"259","Text":"PMT"},{"Pid":"653","Text":"MPEG-2 Audio (ita, Audio layer II, 192 kb/s, @48,000 Hz, stereo)"},{"Pid":"2001","Text":"MPEG-2 Private sections (AIT)"},{"Pid":"2002","Text":"MPEG-2 Private sections (AIT)"},{"Pid":"3001","Text":"DSM-CC U-N (MHP Object Carousel)"},{"Pid":"3002","Text":"DSM-CC U-N (HbbTV)"},{"Pid":"3101","Text":"DSM-CC Stream Descriptors"}]},{"ServID":"Rai Radio2","Parametri":[{"Pid":"260","Text":"PMT"},{"Pid":"654","Text":"MPEG-2 Audio (Audio layer II, 192 kb/s, @48,000 Hz, stereo)"},{"Pid":"2001","Text":"MPEG-2 Private sections (AIT)"},{"Pid":"2002","Text":"MPEG-2 Private sections (AIT)"},{"Pid":"3001","Text":"DSM-CC U-N (MHP Object Carousel)"},{"Pid":"3002","Text":"DSM-CC U-N (HbbTV)"},{"Pid":"3101","Text":"DSM-CC Stream Descriptors"}]},{"ServID":"Rai Radio3","Parametri":[{"Pid":"261","Text":"PMT"},{"Pid":"655","Text":"MPEG-2 Audio (Audio layer II, 192 kb/s, @48,000 Hz, stereo)"},{"Pid":"2001","Text":"MPEG-2 Private sections (AIT)"},{"Pid":"2002","Text":"MPEG-2 Private sections (AIT)"},{"Pid":"3001","Text":"DSM-CC U-N (MHP Object Carousel)"},{"Pid":"3002","Text":"DSM-CC U-N (HbbTV)"},{"Pid":"3101","Text":"DSM-CC Stream Descriptors"}]},{"ServID":"Test HEVC main10","Parametri":[{"Pid":"300","Text":"PMT"},{"Pid":"500","Text":"HEVC video (1280x720, main 10 profile, level 5.1, 4:2:0)"}]},{"ServID":"Rai News 24","Parametri":[{"Pid":"280","Text":"PMT"},{"Pid":"520","Text":"MPEG-2 Video (720x576i, @25 Hz, 16:9, 4:2:0)"},{"Pid":"599","Text":"Teletext (ita, Initial Teletext page)"},{"Pid":"690","Text":"MPEG-2 Audio (ita, Audio layer II, 192 kb/s, @48,000 Hz, stereo)"},{"Pid":"2001","Text":"MPEG-2 Private sections (AIT)"},{"Pid":"2002","Text":"MPEG-2 Private sections (AIT)"},{"Pid":"3001","Text":"DSM-CC U-N (MHP Object Carousel)"},{"Pid":"3002","Text":"DSM-CC U-N (HbbTV)"},{"Pid":"3101","Text":"DSM-CC Stream Descriptors"}]}]'

从概念上讲,我想要这样的东西

if ("Pid" == "258" and "Text" === "PMT") {
return {"ServID":"Rai 1","Parametri":[{"Pid":"258","Text":"PMT"},{"Pid":"512","Text":"MPEG-2 Video (720x576i, @25 Hz, 16:9, 4:2:0)"},{"Pid":"576","Text":"Teletext (ita, Initial Teletext page)"},{"Pid":"650","Text":"MPEG-2 Audio (ita, Audio layer II, 192 kb/s, @48,000 Hz, stereo)"},{"Pid":"694","Text":"MPEG-2 Audio (Audio layer II, 64 kb/s, @48,000 Hz, single channel)"},{"Pid":"699","Text":"MPEG-2 Audio (eng)"},{"Pid":"2001","Text":"MPEG-2 Private sections (AIT)"},{"Pid":"2002","Text":"MPEG-2 Private sections (AIT)"},{"Pid":"3001","Text":"DSM-CC U-N (MHP Object Carousel)"},{"Pid":"3002","Text":"DSM-CC U-N (HbbTV)"},{"Pid":"3101","Text":"DSM-CC Stream Descriptors"}]}

还有一个问题,在这些情况下,是直接在后端进行这项工作(我使用 expressjs)还是返回完整的 json 并使用浏览器搜索 pid?

我可能可以从这样的开始,或者使用.map() 来遍历数组项?

 fs.readFile(file, (err, data) => {
    if (err) throw err;
    let found = data.find(e => e.Parametri.Pid === "258");
    res.json(JSON.parse(found));
});

谢谢

.filter().some()这种组合将完成这项工作:

 const json='[{"ServID":"Rai 1","Parametri":[{"Pid":"258","Text":"PMT"},{"Pid":"512","Text":"MPEG-2 Video (720x576i, @25 Hz, 16:9, 4:2:0)"},{"Pid":"576","Text":"Teletext (ita, Initial Teletext page)"},{"Pid":"650","Text":"MPEG-2 Audio (ita, Audio layer II, 192 kb/s, @48,000 Hz, stereo)"},{"Pid":"694","Text":"MPEG-2 Audio (Audio layer II, 64 kb/s, @48,000 Hz, single channel)"},{"Pid":"699","Text":"MPEG-2 Audio (eng)"},{"Pid":"2001","Text":"MPEG-2 Private sections (AIT)"},{"Pid":"2002","Text":"MPEG-2 Private sections (AIT)"},{"Pid":"3001","Text":"DSM-CC UN (MHP Object Carousel)"},{"Pid":"3002","Text":"DSM-CC UN (HbbTV)"},{"Pid":"3101","Text":"DSM-CC Stream Descriptors"}]},{"ServID":"Rai 2","Parametri":[{"Pid":"257","Text":"PMT"},{"Pid":"513","Text":"MPEG-2 Video (720x576i, @25 Hz, 16:9, 4:2:0)"},{"Pid":"577","Text":"Teletext (ita, Initial Teletext page)"},{"Pid":"651","Text":"MPEG-2 Audio (ita, Audio layer II, 192 kb/s, @48,000 Hz, stereo)"},{"Pid":"695","Text":"MPEG-2 Audio (Audio layer II, 64 kb/s, @48,000 Hz, single channel)"},{"Pid":"696","Text":"MPEG-2 Audio (eng, Audio layer II, 192 kb/s, @48,000 Hz, stereo)"},{"Pid":"2001","Text":"MPEG-2 Private sections (AIT)"},{"Pid":"2002","Text":"MPEG-2 Private sections (AIT)"},{"Pid":"3001","Text":"DSM-CC UN (MHP Object Carousel)"},{"Pid":"3002","Text":"DSM-CC UN (HbbTV)"},{"Pid":"3101","Text":"DSM-CC Stream Descriptors"}]},{"ServID":"Rai 3 TGR Sardegna","Parametri":[{"Pid":"256","Text":"PMT"},{"Pid":"514","Text":"MPEG-2 Video (720x576i, @25 Hz, 16:9, 4:2:0)"},{"Pid":"578","Text":"Teletext (ita, Initial Teletext page)"},{"Pid":"652","Text":"MPEG-2 Audio (ita, Audio layer II, 192 kb/s, @48,000 Hz, stereo)"},{"Pid":"697","Text":"MPEG-2 Audio (Oth, Audio layer II, 64 kb/s, @48,000 Hz, single channel)"},{"Pid":"2001","Text":"MPEG-2 Private sections (AIT)"},{"Pid":"2002","Text":"MPEG-2 Private sections (AIT)"},{"Pid":"3001","Text":"DSM-CC UN (MHP Object Carousel)"},{"Pid":"3002","Text":"DSM-CC UN (HbbTV)"},{"Pid":"3101","Text":"DSM-CC Stream Descriptors"}]},{"ServID":"Rai Radio1","Parametri":[{"Pid":"259","Text":"PMT"},{"Pid":"653","Text":"MPEG-2 Audio (ita, Audio layer II, 192 kb/s, @48,000 Hz, stereo)"},{"Pid":"2001","Text":"MPEG-2 Private sections (AIT)"},{"Pid":"2002","Text":"MPEG-2 Private sections (AIT)"},{"Pid":"3001","Text":"DSM-CC UN (MHP Object Carousel)"},{"Pid":"3002","Text":"DSM-CC UN (HbbTV)"},{"Pid":"3101","Text":"DSM-CC Stream Descriptors"}]},{"ServID":"Rai Radio2","Parametri":[{"Pid":"260","Text":"PMT"},{"Pid":"654","Text":"MPEG-2 Audio (Audio layer II, 192 kb/s, @48,000 Hz, stereo)"},{"Pid":"2001","Text":"MPEG-2 Private sections (AIT)"},{"Pid":"2002","Text":"MPEG-2 Private sections (AIT)"},{"Pid":"3001","Text":"DSM-CC UN (MHP Object Carousel)"},{"Pid":"3002","Text":"DSM-CC UN (HbbTV)"},{"Pid":"3101","Text":"DSM-CC Stream Descriptors"}]},{"ServID":"Rai Radio3","Parametri":[{"Pid":"261","Text":"PMT"},{"Pid":"655","Text":"MPEG-2 Audio (Audio layer II, 192 kb/s, @48,000 Hz, stereo)"},{"Pid":"2001","Text":"MPEG-2 Private sections (AIT)"},{"Pid":"2002","Text":"MPEG-2 Private sections (AIT)"},{"Pid":"3001","Text":"DSM-CC UN (MHP Object Carousel)"},{"Pid":"3002","Text":"DSM-CC UN (HbbTV)"},{"Pid":"3101","Text":"DSM-CC Stream Descriptors"}]},{"ServID":"Test HEVC main10","Parametri":[{"Pid":"300","Text":"PMT"},{"Pid":"500","Text":"HEVC video (1280x720, main 10 profile, level 5.1, 4:2:0)"}]},{"ServID":"Rai News 24","Parametri":[{"Pid":"280","Text":"PMT"},{"Pid":"520","Text":"MPEG-2 Video (720x576i, @25 Hz, 16:9, 4:2:0)"},{"Pid":"599","Text":"Teletext (ita, Initial Teletext page)"},{"Pid":"690","Text":"MPEG-2 Audio (ita, Audio layer II, 192 kb/s, @48,000 Hz, stereo)"},{"Pid":"2001","Text":"MPEG-2 Private sections (AIT)"},{"Pid":"2002","Text":"MPEG-2 Private sections (AIT)"},{"Pid":"3001","Text":"DSM-CC UN (MHP Object Carousel)"},{"Pid":"3002","Text":"DSM-CC UN (HbbTV)"},{"Pid":"3101","Text":"DSM-CC Stream Descriptors"}]}]'; let pid=258, txt="PMT"; const res=JSON.parse(json).filter(ch=> ch.Parametri.some(e=> e.Pid==pid && e.Text===txt ) ); console.log(res);

res在这里仍然是一个 JavaScript 对象。 如果您需要一个 JSON 字符串,那么只需执行JSON.stringify(res)

回复您的额外问题,是在后端还是前端执行此操作:

如果您可以确定在任何地方都不需要过滤掉的数据,那么您应该尽早将其删除(即在后端)。 另一方面 - 如果您的搜索请求变化很大 - 将所有信息发送到前端一次然后在浏览器中进行快速(本地)过滤(无需每次都从服务器获取新数据)可能是有利的)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM