【问题标题】:Extract subset from json in javascript在javascript中从json中提取子集
【发布时间】:2018-04-20 08:24:30
【问题描述】:

我想根据 JavaScript 中的输入从主要 JSON 批量数据中减去 json 条目。主要 JSON 数据中的每个条目都有其自己的唯一 ID,但过滤器应基于文本标识符而不是 ID。例如,我想检索包含单词burgBurgBURGbUrg 等)或任何其他给定变体的所有条目。这当然也应该与其他搜索词一起使用。我不具备执行此操作的 JavaScript 技能。

在下面给出的数据中,这应该返回 3 个结果。显然,结果应该是完全相同的 JSON 格式。

示例 JSON:

{"type":"FeatureCollection","features":[{"id":1,"text":"Cape Town"},{"id":2,"text":"Kimberley"},{"id":3,"text":"Beaufort West"},{"id":4,"text":"Johannesburg Park"},{"id":5,"text":"Germiston"},{"id":6,"text":"Pietermaritzburg"},{"id":7,"text":"Durban"},{"id":8,"text":"Bellville"},{"id":9,"text":"Wellington"},{"id":10,"text":"Huguenot"},{"id":11,"text":"Worcester"},{"id":12,"text":"Matjiesfontein"},{"id":13,"text":"Laingsburg"},{"id":14,"text":"Prince Albert"},{"id":15,"text":"Hutchinson"},{"id":16,"text":"De Aar"},{"id":17,"text":"Warrenton"}]}

【问题讨论】:

  • 正确解析,然后从 JS 对象中选择您需要的内容。
  • 是的,恐怕这对我没有多大帮助....当前代码已经解析了整个JSON,但我不知道在解析之前还是在解析之后更容易过滤..
  • "但是我不知道是先过滤还是先解析后过滤更容易"---那么,实现什么,根据事实做决定?你更信任谁——你自己还是互联网上的陌生人?
  • 那么,示例 JSON 输出应该是什么?
  • 示例 JSON 输出应包含与示例 JSON 中给出的完全相同的格式,但仅包含文本包含搜索/单词条目的标识符(+ 内容)。在示例中,这将导致仅返回 3 个条目。

标签: javascript json regex subset


【解决方案1】:

不要为此使用 JavaScript。请改用 SQL 及其 LIKE 运算符。

But if you insist on using JavaScript for this…

就像HTML一样,正则表达式因为序列化而无法完全解析JSON。

JSON.parse 之后的过滤非常简单;你可以使用Array.prototype.filter() 方法:

var s = '{"type":"FeatureCollection","features":[{"id":1,"text":"Cape Town"},{"id":2,"text":"Kimberley"},{"id":3,"text":"Beaufort West"},{"id":4,"text":"Johannesburg Park"},{"id":5,"text":"Germiston"},{"id":6,"text":"Pietermaritzburg"},{"id":7,"text":"Durban"},{"id":8,"text":"Bellville"},{"id":9,"text":"Wellington"},{"id":10,"text":"Huguenot"},{"id":11,"text":"Worcester"},{"id":12,"text":"Matjiesfontein"},{"id":13,"text":"Laingsburg"},{"id":14,"text":"Prince Albert"},{"id":15,"text":"Hutchinson"},{"id":16,"text":"De Aar"},{"id":17,"text":"Warrenton"}]}';
var input = "burg";
var o = JSON.parse(s);
o.features = o.features.filter(e => RegExp(input, 'i').test(e.text));
console.log(JSON.stringify(o));

【讨论】:

  • 谢谢!!这似乎可以解决问题。一个简短的附加问题:如何用文本变量替换现在固定的字符串“burg”?我已经尝试在 Javascript RegEx 的文档中找到答案,但是我显然没有成功。
  • @Coryza 如果您喜欢答案,正确的感谢是支持和/或接受。 (我稍微改一下sn-p来回答后续。)
  • 你说得对..由于我的兴奋,我忘记了它;)。再次感谢。
猜你喜欢
  • 2021-05-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-16
相关资源
最近更新 更多