如何使用JQ根据指定键数组过滤JSON数据?
从JSON中按指定键数组提取键值对的实现方法
给定以下输入:
ARRAY=["keyA", "keyC", "keyE"] JSON={ "keyA": "valueA", "keyB": "valueB", "keyC": "valueC", "keyD": "valueD", "keyE": "valueE", "keyF": "valueF" }
需要依据ARRAY中的键,从JSON中提取对应键值对,得到目标结果:
TARGET_JSON={ "keyA": "valueA", "keyC": "valueC", "keyE": "valueE" }
JavaScript 实现
通过遍历键数组,筛选原对象中存在的键并构建新对象:
const ARRAY = ["keyA", "keyC", "keyE"]; const JSON_DATA = { "keyA": "valueA", "keyB": "valueB", "keyC": "valueC", "keyD": "valueD", "keyE": "valueE", "keyF": "valueF" }; const TARGET_JSON = ARRAY.reduce((acc, key) => { if (JSON_DATA.hasOwnProperty(key)) { acc[key] = JSON_DATA[key]; } return acc; }, {}); console.log(TARGET_JSON);
Python 实现
利用字典推导式快速生成目标字典:
ARRAY = ["keyA", "keyC", "keyE"] JSON_DATA = { "keyA": "valueA", "keyB": "valueB", "keyC": "valueC", "keyD": "valueD", "keyE": "valueE", "keyF": "valueF" } TARGET_JSON = {key: JSON_DATA[key] for key in ARRAY if key in JSON_DATA} print(TARGET_JSON)
Java 实现
遍历键数组,逐个从原Map中取出对应值并放入新Map:
import java.util.HashMap; import java.util.List; import java.util.Map; public class ExtractKeys { public static void main(String[] args) { List<String> ARRAY = List.of("keyA", "keyC", "keyE"); Map<String, String> JSON_DATA = new HashMap<>(); JSON_DATA.put("keyA", "valueA"); JSON_DATA.put("keyB", "valueB"); JSON_DATA.put("keyC", "valueC"); JSON_DATA.put("keyD", "valueD"); JSON_DATA.put("keyE", "valueE"); JSON_DATA.put("keyF", "valueF"); Map<String, String> TARGET_JSON = new HashMap<>(); for (String key : ARRAY) { if (JSON_DATA.containsKey(key)) { TARGET_JSON.put(key, JSON_DATA.get(key)); } } System.out.println(TARGET_JSON); } }
内容的提问来源于stack exchange,提问作者Murakami
相关产品推荐
相关产品推荐

