[英]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.