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



我试图从json文件中提取一个特定的对象,记下键,然后我想返回新的json。问题是我的档案很复杂。作为后端,我使用expressjs

Sample.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 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"}]}]';
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)即可。

在回答您的额外问题时,是在后端还是前端这样做:

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

最新更新